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