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