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
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.
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.
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
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.
28 * dump.c: Dump sector information
30 * Known contributors to this file:
32 * Steve McClure, 1997 (added timestamping)
55 struct nstr_sect nstr;
64 if (!snxtsct(&nstr, player->argp[1]))
67 (void) strcpy(dirstr, ". $");
69 for (n = 1; n <= 6; n++)
72 np = getnatp(player->cnum);
74 if (!player->argp[2]) {
75 for (n = 1; n <= 80; n++) field[n-1] = n;
80 while (player->argp[n]) {
81 if (!strcmp("des",player->argp[n])) {
83 } else if (!strcmp("sdes",player->argp[n])) {
85 } else if (!strcmp("eff",player->argp[n])) {
87 } else if (!strcmp("mob",player->argp[n])) {
89 } else if (!strcmp("*",player->argp[n])) {
91 } else if (!strcmp("off",player->argp[n])) {
93 } else if (!strcmp("min",player->argp[n])) {
95 } else if (!strcmp("gold",player->argp[n])) {
97 } else if (!strcmp("fert",player->argp[n])) {
99 } else if (!strcmp("ocontent",player->argp[n])) {
101 } else if (!strcmp("uran",player->argp[n])) {
103 } else if (!strcmp("work",player->argp[n])) {
105 } else if (!strcmp("avail",player->argp[n])) {
107 } else if (!strcmp("terr",player->argp[n])) {
109 } else if (!strcmp("civ",player->argp[n])) {
111 } else if (!strcmp("mil",player->argp[n])) {
113 } else if (!strcmp("uw",player->argp[n])) {
115 } else if (!strcmp("food",player->argp[n])) {
117 } else if (!strcmp("shell",player->argp[n])) {
119 } else if (!strcmp("gun",player->argp[n])) {
121 } else if (!strcmp("pet",player->argp[n])) {
123 } else if (!strcmp("iron",player->argp[n])) {
125 } else if (!strcmp("dust",player->argp[n])) {
127 } else if (!strcmp("bar",player->argp[n])) {
129 } else if (!strcmp("oil",player->argp[n])) {
131 } else if (!strcmp("lcm",player->argp[n])) {
133 } else if (!strcmp("hcm",player->argp[n])) {
135 } else if (!strcmp("rad",player->argp[n])) {
137 } else if (!strcmp("u_del",player->argp[n])) {
139 } else if (!strcmp("f_del",player->argp[n])) {
141 } else if (!strcmp("s_del",player->argp[n])) {
143 } else if (!strcmp("g_del",player->argp[n])) {
145 } else if (!strcmp("p_del",player->argp[n])) {
147 } else if (!strcmp("i_del",player->argp[n])) {
149 } else if (!strcmp("d_del",player->argp[n])) {
151 } else if (!strcmp("b_del",player->argp[n])) {
153 } else if (!strcmp("o_del",player->argp[n])) {
155 } else if (!strcmp("l_del",player->argp[n])) {
157 } else if (!strcmp("h_del",player->argp[n])) {
159 } else if (!strcmp("r_del",player->argp[n])) {
161 } else if (!strcmp("u_cut",player->argp[n])) {
163 } else if (!strcmp("f_cut",player->argp[n])) {
165 } else if (!strcmp("s_cut",player->argp[n])) {
167 } else if (!strcmp("g_cut",player->argp[n])) {
169 } else if (!strcmp("p_cut",player->argp[n])) {
171 } else if (!strcmp("i_cut",player->argp[n])) {
173 } else if (!strcmp("d_cut",player->argp[n])) {
175 } else if (!strcmp("b_cut",player->argp[n])) {
177 } else if (!strcmp("o_cut",player->argp[n])) {
179 } else if (!strcmp("l_cut",player->argp[n])) {
181 } else if (!strcmp("h_cut",player->argp[n])) {
183 } else if (!strcmp("r_cut",player->argp[n])) {
185 } else if (!strcmp("dist_x",player->argp[n])) {
187 } else if (!strcmp("dist_y",player->argp[n])) {
189 } else if (!strcmp("c_dist",player->argp[n])) {
191 } else if (!strcmp("m_dist",player->argp[n])) {
193 } else if (!strcmp("u_dist",player->argp[n])) {
195 } else if (!strcmp("f_dist",player->argp[n])) {
197 } else if (!strcmp("s_dist",player->argp[n])) {
199 } else if (!strcmp("g_dist",player->argp[n])) {
201 } else if (!strcmp("p_dist",player->argp[n])) {
203 } else if (!strcmp("i_dist",player->argp[n])) {
205 } else if (!strcmp("d_dist",player->argp[n])) {
207 } else if (!strcmp("b_dist",player->argp[n])) {
209 } else if (!strcmp("o_dist",player->argp[n])) {
211 } else if (!strcmp("l_dist",player->argp[n])) {
213 } else if (!strcmp("h_dist",player->argp[n])) {
215 } else if (!strcmp("r_dist",player->argp[n])) {
217 } else if (!strcmp("road",player->argp[n])) {
219 } else if (!strcmp("rail",player->argp[n])) {
221 } else if (!strcmp("defense",player->argp[n])) {
223 } else if (!strcmp("fallout",player->argp[n])) {
225 } else if (!strcmp("coast",player->argp[n])) {
227 } else if (!strcmp("c_del",player->argp[n])) {
229 } else if (!strcmp("m_del",player->argp[n])) {
231 } else if (!strcmp("c_cut",player->argp[n])) {
233 } else if (!strcmp("m_cut",player->argp[n])) {
235 } else if (!strcmp("terr1",player->argp[n])) {
237 } else if (!strcmp("terr2",player->argp[n])) {
239 } else if (!strcmp("terr3",player->argp[n])) {
242 pr("Unrecognized field %s\n",player->argp[n]);
245 pr("Too many fields\n");
255 pr("DUMP SECTOR %d\n", now);
263 case 1: pr("des"); break;
264 case 2: pr("sdes"); break;
265 case 3: pr("eff"); break;
266 case 4: pr("mob"); break;
267 case 5: pr("*"); break;
268 case 6: pr("off"); break;
269 case 7: pr("min"); break;
270 case 8: pr("gold"); break;
271 case 9: pr("fert"); break;
272 case 10: pr("ocontent"); break;
273 case 11: pr("uran"); break;
274 case 12: pr("work"); break;
275 case 13: pr("avail"); break;
276 case 14: pr("terr"); break;
277 case 15: pr("civ"); break;
278 case 16: pr("mil"); break;
279 case 17: pr("uw"); break;
280 case 18: pr("food"); break;
281 case 19: pr("shell"); break;
282 case 20: pr("gun"); break;
283 case 21: pr("pet"); break;
284 case 22: pr("iron"); break;
285 case 23: pr("dust"); break;
286 case 24: pr("bar"); break;
287 case 25: pr("oil"); break;
288 case 26: pr("lcm"); break;
289 case 27: pr("hcm"); break;
290 case 28: pr("rad"); break;
291 case 29: pr("u_del"); break;
292 case 30: pr("f_del"); break;
293 case 31: pr("s_del"); break;
294 case 32: pr("g_del"); break;
295 case 33: pr("p_del"); break;
296 case 34: pr("i_del"); break;
297 case 35: pr("d_del"); break;
298 case 36: pr("b_del"); break;
299 case 37: pr("o_del"); break;
300 case 38: pr("l_del"); break;
301 case 39: pr("h_del"); break;
302 case 40: pr("r_del"); break;
303 case 41: pr("u_cut"); break;
304 case 42: pr("f_cut"); break;
305 case 43: pr("s_cut"); break;
306 case 44: pr("g_cut"); break;
307 case 45: pr("p_cut"); break;
308 case 46: pr("i_cut"); break;
309 case 47: pr("d_cut"); break;
310 case 48: pr("b_cut"); break;
311 case 49: pr("o_cut"); break;
312 case 50: pr("l_cut"); break;
313 case 51: pr("h_cut"); break;
314 case 52: pr("r_cut"); break;
315 case 53: pr("dist_x"); break;
316 case 54: pr("dist_y"); break;
317 case 55: pr("c_dist"); break;
318 case 56: pr("m_dist"); break;
319 case 57: pr("u_dist"); break;
320 case 58: pr("f_dist"); break;
321 case 59: pr("s_dist"); break;
322 case 60: pr("g_dist"); break;
323 case 61: pr("p_dist"); break;
324 case 62: pr("i_dist"); break;
325 case 63: pr("d_dist"); break;
326 case 64: pr("b_dist"); break;
327 case 65: pr("o_dist"); break;
328 case 66: pr("l_dist"); break;
329 case 67: pr("h_dist"); break;
330 case 68: pr("r_dist"); break;
331 case 69: pr("road"); break;
332 case 70: pr("rail"); break;
333 case 71: pr("defense"); break;
334 case 72: pr("fallout"); break;
335 case 73: pr("coast"); break;
336 case 74: pr("c_del"); break;
337 case 75: pr("m_del"); break;
338 case 76: pr("c_cut"); break;
339 case 77: pr("m_cut"); break;
340 case 78: pr("terr1"); break;
341 case 79: pr("terr2"); break;
342 case 80: pr("terr3"); break;
348 while (nxtsct(&nstr, §)) {
355 pr("%d ", sect.sct_own);
356 getvec(VT_DEL, del, (s_char *)§, EF_SECTOR);
357 getvec(VT_DIST, dist, (s_char *)§, EF_SECTOR);
358 getvec(VT_ITEM, item, (s_char *)§, EF_SECTOR);
359 getvec(VT_COND, cond, (s_char *)§, EF_SECTOR);
360 pr("%d %d", xrel(np,nstr.x), yrel(np,nstr.y));
366 switch (field[n++]) {
367 case 1: pr("%c", dchr[sect.sct_type].d_mnem); break;
368 case 2: if (sect.sct_newtype != sect.sct_type)
369 pr("%c", dchr[sect.sct_newtype].d_mnem);
373 case 3: pr("%d", sect.sct_effic); break;
374 case 4: pr("%d", sect.sct_mobil); break;
375 case 5: pr("%c", sect.sct_own != sect.sct_oldown ? '*' : '.');
377 case 6: pr("%d", sect.sct_off); break;
378 case 7: pr("%d", sect.sct_min); break;
379 case 8: pr("%d", sect.sct_gmin); break;
380 case 9: pr("%d", sect.sct_fertil); break;
381 case 10: pr("%d", sect.sct_oil); break;
382 case 11: pr("%d", sect.sct_uran); break;
383 case 12: pr("%d", sect.sct_work); break;
384 case 13: pr("%d", sect.sct_avail); break;
385 case 14: pr("%d", sect.sct_terr); break;
386 case 15: pr("%d", item[I_CIVIL]); break;
387 case 16: pr("%d", item[I_MILIT]); break;
388 case 17: pr("%d", item[I_UW]); break;
389 case 18: pr("%d", item[I_FOOD]); break;
391 case 19: pr("%d", item[I_SHELL]); break;
392 case 20: pr("%d", item[I_GUN]); break;
393 case 21: pr("%d", item[I_PETROL]); break;
394 case 22: pr("%d", item[I_IRON]); break;
395 case 23: pr("%d", item[I_DUST]); break;
396 case 24: pr("%d", item[I_BAR]); break;
397 case 25: pr("%d", item[I_OIL]); break;
398 case 26: pr("%d", item[I_LCM]); break;
399 case 27: pr("%d", item[I_HCM]); break;
400 case 28: pr("%d", item[I_RAD]); break;
402 case 29: pr("%c", dirstr[del[I_UW] & 0x7]); break;
403 case 30: pr("%c", dirstr[del[I_FOOD] & 0x7]); break;
404 case 31: pr("%c", dirstr[del[I_SHELL] & 0x7]); break;
405 case 32: pr("%c", dirstr[del[I_GUN] & 0x7]); break;
406 case 33: pr("%c", dirstr[del[I_PETROL] & 0x7]); break;
407 case 34: pr("%c", dirstr[del[I_IRON] & 0x7]); break;
408 case 35: pr("%c", dirstr[del[I_DUST] & 0x7]); break;
409 case 36: pr("%c", dirstr[del[I_BAR] & 0x7]); break;
410 case 37: pr("%c", dirstr[del[I_OIL] & 0x7]); break;
411 case 38: pr("%c", dirstr[del[I_LCM] & 0x7]); break;
412 case 39: pr("%c", dirstr[del[I_HCM] & 0x7]); break;
413 case 40: pr("%c", dirstr[del[I_RAD] & 0x7]); break;
414 case 41: pr("%d", del[I_UW] & ~0x7); break;
415 case 42: pr("%d", del[I_FOOD] & ~0x7); break;
416 case 43: pr("%d", del[I_SHELL] & ~0x7); break;
417 case 44: pr("%d", del[I_GUN] & ~0x7); break;
418 case 45: pr("%d", del[I_PETROL] & ~0x7); break;
419 case 46: pr("%d", del[I_IRON] & ~0x7); break;
420 case 47: pr("%d", del[I_DUST] & ~0x7); break;
421 case 48: pr("%d", del[I_BAR] & ~0x7); break;
422 case 49: pr("%d", del[I_OIL] & ~0x7); break;
423 case 50: pr("%d", del[I_LCM] & ~0x7); break;
424 case 51: pr("%d", del[I_HCM] & ~0x7); break;
425 case 52: pr("%d", del[I_RAD] & ~0x7); break;
427 case 53: pr("%d", xrel(getnatp(player->cnum),sect.sct_dist_x)); break;
428 case 54: pr("%d", yrel(getnatp(player->cnum),sect.sct_dist_y)); break;
429 case 55: pr("%d", dist[I_CIVIL]); break;
430 case 56: pr("%d", dist[I_MILIT]); break;
431 case 57: pr("%d", dist[I_UW]); break;
432 case 58: pr("%d", dist[I_FOOD]); break;
433 case 59: pr("%d", dist[I_SHELL]); break;
434 case 60: pr("%d", dist[I_GUN]); break;
435 case 61: pr("%d", dist[I_PETROL]); break;
436 case 62: pr("%d", dist[I_IRON]); break;
437 case 63: pr("%d", dist[I_DUST]); break;
438 case 64: pr("%d", dist[I_BAR]); break;
439 case 65: pr("%d", dist[I_OIL]); break;
440 case 66: pr("%d", dist[I_LCM]); break;
441 case 67: pr("%d", dist[I_HCM]); break;
442 case 68: pr("%d", dist[I_RAD]); break;
443 case 69: pr("%d", sect.sct_road); break;
444 case 70: pr("%d", sect.sct_rail); break;
445 case 71: pr("%d", sect.sct_defense); break;
448 pr("%d", cond[C_FALLOUT]);
452 case 73: pr("%d", sect.sct_coastal); break;
453 case 74: pr("%c", dirstr[del[I_CIVIL] & 0x7]); break;
454 case 75: pr("%c", dirstr[del[I_MILIT] & 0x7]); break;
455 case 76: pr("%d", del[I_CIVIL] & ~0x7); break;
456 case 77: pr("%d", del[I_MILIT] & ~0x7); break;
457 case 78: pr("%d", sect.sct_terr1); break;
458 case 79: pr("%d", sect.sct_terr2); break;
459 case 80: pr("%d", sect.sct_terr3); break;
466 pr("%s: No sector(s)\n", player->argp[1]);
468 pr("%s: No sector(s)\n", "");
471 pr("%d sector%s\n", nsect, splur(nsect));