]> git.pond.sub.org Git - empserver/blob - src/lib/commands/ldump.c
Update copyright notice.
[empserver] / src / lib / commands / ldump.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2004, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                           Ken Stevens, Steve McClure
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  *  ---
21  *
22  *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23  *  related information and legal notices. It is expected that any future
24  *  projects/authors will amend these files as needed.
25  *
26  *  ---
27  *
28  *  ldump.c: Dump land unit information
29  * 
30  *  Known contributors to this file:
31  *     John Yockey, 1997
32  *     Steve McClure, 1998
33  */
34
35 #include "misc.h"
36 #include "player.h"
37 #include "xy.h"
38 #include "sect.h"
39 #include "land.h"
40 #include "nat.h"
41 #include "nsc.h"
42 #include "file.h"
43 #include "optlist.h"
44 #include "var.h"
45 #include "commands.h"
46
47 int
48 ldump(void)
49 {
50     int nunits;
51     int field[128];
52     struct nstr_item ni;
53     struct lndstr land;
54     int n, i;
55     struct natstr *np;
56     time_t now;
57
58     if (!snxtitem(&ni, EF_LAND, player->argp[1]))
59         return RET_SYN;
60     prdate();
61     nunits = 0;
62
63     if (!player->argp[2]) {
64         for (n = 1; n <= 39; n++)
65             field[n - 1] = n;
66         field[n - 1] = 0;
67     } else {
68         n = 2;
69         i = 0;
70         while (player->argp[n]) {
71             if (!strcmp("type", player->argp[n])) {
72                 field[i++] = 1;
73             } else if (!strcmp("x", player->argp[n])) {
74                 field[i++] = 2;
75             } else if (!strcmp("y", player->argp[n])) {
76                 field[i++] = 3;
77             } else if (!strcmp("army", player->argp[n])) {
78                 field[i++] = 4;
79             } else if (!strcmp("eff", player->argp[n])) {
80                 field[i++] = 5;
81             } else if (!strcmp("mil", player->argp[n])) {
82                 field[i++] = 6;
83             } else if (!strcmp("fort", player->argp[n])) {
84                 field[i++] = 7;
85             } else if (!strcmp("mob", player->argp[n])) {
86                 field[i++] = 8;
87             } else if (!strcmp("food", player->argp[n])) {
88                 field[i++] = 9;
89             } else if (!strcmp("fuel", player->argp[n])) {
90                 field[i++] = 10;
91             } else if (!strcmp("tech", player->argp[n])) {
92                 field[i++] = 11;
93             } else if (!strcmp("retr", player->argp[n])) {
94                 field[i++] = 12;
95             } else if (!strcmp("react", player->argp[n])) {
96                 field[i++] = 13;
97             } else if (!strcmp("xl", player->argp[n])) {
98                 field[i++] = 14;
99             } else if (!strcmp("nland", player->argp[n])) {
100                 field[i++] = 15;
101             } else if (!strcmp("land", player->argp[n])) {
102                 field[i++] = 16;
103             } else if (!strcmp("ship", player->argp[n])) {
104                 field[i++] = 17;
105             } else if (!strcmp("shell", player->argp[n])) {
106                 field[i++] = 18;
107             } else if (!strcmp("gun", player->argp[n])) {
108                 field[i++] = 19;
109             } else if (!strcmp("petrol", player->argp[n])) {
110                 field[i++] = 20;
111             } else if (!strcmp("iron", player->argp[n])) {
112                 field[i++] = 21;
113             } else if (!strcmp("dust", player->argp[n])) {
114                 field[i++] = 22;
115             } else if (!strcmp("bar", player->argp[n])) {
116                 field[i++] = 23;
117             } else if (!strcmp("oil", player->argp[n])) {
118                 field[i++] = 24;
119             } else if (!strcmp("lcm", player->argp[n])) {
120                 field[i++] = 25;
121             } else if (!strcmp("hcm", player->argp[n])) {
122                 field[i++] = 26;
123             } else if (!strcmp("rad", player->argp[n])) {
124                 field[i++] = 27;
125             } else if (!strcmp("att", player->argp[n])) {
126                 field[i++] = 28;
127             } else if (!strcmp("def", player->argp[n])) {
128                 field[i++] = 29;
129             } else if (!strcmp("vul", player->argp[n])) {
130                 field[i++] = 30;
131             } else if (!strcmp("spd", player->argp[n])) {
132                 field[i++] = 31;
133             } else if (!strcmp("vis", player->argp[n])) {
134                 field[i++] = 32;
135             } else if (!strcmp("spy", player->argp[n])) {
136                 field[i++] = 33;
137             } else if (!strcmp("radius", player->argp[n])) {
138                 field[i++] = 34;
139             } else if (!strcmp("frg", player->argp[n])) {
140                 field[i++] = 35;
141             } else if (!strcmp("acc", player->argp[n])) {
142                 field[i++] = 36;
143             } else if (!strcmp("dam", player->argp[n])) {
144                 field[i++] = 37;
145             } else if (!strcmp("amm", player->argp[n])) {
146                 field[i++] = 38;
147             } else if (!strcmp("aaf", player->argp[n])) {
148                 field[i++] = 39;
149             } else {
150                 pr("Unrecognized field %s\n", player->argp[n]);
151             }
152             if (n++ > 100) {
153                 pr("Too many fields\n");
154                 return RET_FAIL;
155             }
156         }
157         field[i] = 0;
158     }
159
160     if (player->god)
161         pr("   ");
162     time(&now);
163     pr("DUMP LAND UNITS %ld\n", (long)now);
164     if (player->god)
165         pr("own ");
166     pr("id");
167     n = 0;
168     while (field[n]) {
169         switch (field[n]) {
170         case 1:
171             pr(" type");
172             break;
173         case 2:
174             pr(" x");
175             break;
176         case 3:
177             pr(" y");
178             break;
179         case 4:
180             pr(" army");
181             break;
182         case 5:
183             pr(" eff");
184             break;
185         case 6:
186             pr(" mil");
187             break;
188         case 7:
189             pr(" fort");
190             break;
191         case 8:
192             pr(" mob");
193             break;
194         case 9:
195             pr(" food");
196             break;
197         case 10:
198             pr(" fuel");
199             break;
200         case 11:
201             pr(" tech");
202             break;
203         case 12:
204             pr(" retr");
205             break;
206         case 13:
207             pr(" react");
208             break;
209         case 14:
210             pr(" xl");
211             break;
212         case 15:
213             pr(" nland");
214             break;
215         case 16:
216             pr(" land");
217             break;
218         case 17:
219             pr(" ship");
220             break;
221         case 18:
222             pr(" shell");
223             break;
224         case 19:
225             pr(" gun");
226             break;
227         case 20:
228             pr(" petrol");
229             break;
230         case 21:
231             pr(" iron");
232             break;
233         case 22:
234             pr(" dust");
235             break;
236         case 23:
237             pr(" bar");
238             break;
239         case 24:
240             pr(" oil");
241             break;
242         case 25:
243             pr(" lcm");
244             break;
245         case 26:
246             pr(" hcm");
247             break;
248         case 27:
249             pr(" rad");
250             break;
251         case 28:
252             pr(" att");
253             break;
254         case 29:
255             pr(" def");
256             break;
257         case 30:
258             pr(" vul");
259             break;
260         case 31:
261             pr(" spd");
262             break;
263         case 32:
264             pr(" vis");
265             break;
266         case 33:
267             pr(" spy");
268             break;
269         case 34:
270             pr(" radius");
271             break;
272         case 35:
273             pr(" frg");
274             break;
275         case 36:
276             pr(" acc");
277             break;
278         case 37:
279             pr(" dam");
280             break;
281         case 38:
282             pr(" amm");
283             break;
284         case 39:
285             pr(" aaf");
286             break;
287         }
288         n++;
289     }
290     pr("\n");
291
292     np = getnatp(player->cnum);
293     while (nxtitem(&ni, (s_char *)&land)) {
294         if (land.lnd_own == 0)
295             continue;
296         if (!player->owner && !player->god)
297             continue;
298         if (land.lnd_type < 0 || land.lnd_type > lnd_maxno) {
299             pr("bad unit type %d (#%d)\n", land.lnd_type, ni.cur);
300             continue;
301         }
302         count_land_planes(&land);
303         lnd_count_units(&land);
304
305         nunits++;
306         if (player->god)
307             pr("%d ", land.lnd_own);
308         pr("%d", ni.cur);
309         n = 0;
310         while (field[n]) {
311             switch (field[n++]) {
312             case 1:
313                 pr(" %.4s", lchr[(int)land.lnd_type].l_name);
314                 break;
315             case 2:
316                 pr(" %d", xrel(np, land.lnd_x));
317                 break;
318             case 3:
319                 pr(" %d", yrel(np, land.lnd_y));
320                 break;
321             case 4:
322                 if (land.lnd_army == ' ')
323                     pr(" ~");
324                 else
325                     pr(" %c", land.lnd_army);
326                 break;
327             case 5:
328                 pr(" %d", land.lnd_effic);
329                 break;
330             case 6:
331                 pr(" %d", lnd_getmil(&land));
332                 break;
333             case 7:
334                 pr(" %d", land.lnd_harden);
335                 break;
336             case 8:
337                 pr(" %d", land.lnd_mobil);
338                 break;
339             case 9:
340                 pr(" %d", land.lnd_item[I_FOOD]);
341                 break;
342             case 10:
343                 if (opt_FUEL)
344                     pr(" %d", land.lnd_fuel);
345                 else
346                     pr(" 0");
347                 break;
348             case 11:
349                 pr(" %d", land.lnd_tech);
350                 break;
351             case 12:
352                 pr(" %d", land.lnd_retreat);
353                 break;
354             case 13:
355                 pr(" %d", land.lnd_rad_max);
356                 break;
357             case 14:
358                 pr(" %d", land.lnd_nxlight);
359                 break;
360             case 15:
361                 pr(" %d", land.lnd_nland);
362                 break;
363             case 16:
364                 pr(" %d", land.lnd_land);
365                 break;
366             case 17:
367                 pr(" %d", land.lnd_ship);
368                 break;
369             case 18:
370                 pr(" %d", land.lnd_item[I_SHELL]);
371                 break;
372             case 19:
373                 pr(" %d", land.lnd_item[I_GUN]);
374                 break;
375             case 20:
376                 pr(" %d", land.lnd_item[I_PETROL]);
377                 break;
378             case 21:
379                 pr(" %d", land.lnd_item[I_IRON]);
380                 break;
381             case 22:
382                 pr(" %d", land.lnd_item[I_DUST]);
383                 break;
384             case 23:
385                 pr(" %d", land.lnd_item[I_BAR]);
386                 break;
387             case 24:
388                 pr(" %d", land.lnd_item[I_OIL]);
389                 break;
390             case 25:
391                 pr(" %d", land.lnd_item[I_LCM]);
392                 break;
393             case 26:
394                 pr(" %d", land.lnd_item[I_HCM]);
395                 break;
396             case 27:
397                 pr(" %d", land.lnd_item[I_RAD]);
398                 break;
399             case 28:
400                 pr(" %1.2f", land.lnd_att);
401                 break;
402             case 29:
403                 pr(" %1.2f", land.lnd_def);
404                 break;
405             case 30:
406                 pr(" %d", land.lnd_vul);
407                 break;
408             case 31:
409                 pr(" %d", land.lnd_spd);
410                 break;
411             case 32:
412                 pr(" %d", land.lnd_vis);
413                 break;
414             case 33:
415                 pr(" %d", land.lnd_spy);
416                 break;
417             case 34:
418                 pr(" %d", land.lnd_rad);
419                 break;
420             case 35:
421                 pr(" %d", land.lnd_frg);
422                 break;
423             case 36:
424                 pr(" %d", land.lnd_acc);
425                 break;
426             case 37:
427                 pr(" %d", land.lnd_dam);
428                 break;
429             case 38:
430                 pr(" %d", land.lnd_ammo);
431                 break;
432             case 39:
433                 pr(" %d", land.lnd_aaf);
434                 break;
435             }
436         }
437         pr("\n");
438     }
439     if (nunits == 0) {
440         if (player->argp[1])
441             pr("%s: No unit(s)\n", player->argp[1]);
442         else
443             pr("%s: No unit(s)\n", "");
444         return RET_FAIL;
445     } else
446         pr("%d unit%s\n", nunits, splur(nunits));
447     return RET_OK;
448 }