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