]> git.pond.sub.org Git - empserver/blob - src/lib/commands/cens.c
Update copyright notice
[empserver] / src / lib / commands / cens.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  *  cens.c: Do a census report
28  *
29  *  Known contributors to this file:
30  *     Steve McClure, 2000
31  */
32
33 #include <config.h>
34
35 #include "commands.h"
36 #include "optlist.h"
37 #include "path.h"
38
39 static void cens_hdr(void);
40
41 int
42 cens(void)
43 {
44     struct sctstr sect;
45     int nsect;
46     int n;
47     struct nstr_sect nstr;
48     char dirstr[20];
49
50     if (!snxtsct(&nstr, player->argp[1]))
51         return RET_SYN;
52     prdate();
53     for (n = 1; n <= 6; n++)
54         dirstr[n] = dirch[n];
55     dirstr[0] = '.';
56     dirstr[7] = '$';
57     dirstr[8] = '\0';
58     nsect = 0;
59     while (nxtsct(&nstr, &sect)) {
60         if (!player->owner)
61             continue;
62         if (nsect++ == 0)
63             cens_hdr();
64         if (player->god)
65             pr("%3d ", sect.sct_own);
66         prxy("%4d,%-4d", nstr.x, nstr.y);
67         pr(" %c", dchr[sect.sct_type].d_mnem);
68         if (sect.sct_newtype != sect.sct_type)
69             pr("%c", dchr[sect.sct_newtype].d_mnem);
70         else
71             pr(" ");
72         pr("%4d%%", sect.sct_effic);
73         if (sect.sct_off)
74             pr(" no ");
75         else
76             pr("    ");
77         pr("%4d", sect.sct_mobil);
78
79         pr(" %c", dirstr[sect.sct_del[I_UW] & 0x7]);
80         pr("%c", dirstr[sect.sct_del[I_FOOD] & 0x7]);
81
82         n = sect.sct_dist[I_UW] % 1000;
83         pr(" %c", n == 0 ? '.' : '0' + (n / 100));
84         n = sect.sct_dist[I_FOOD] % 1000;
85         pr("%c ", n == 0 ? '.' : '0' + (n / 100));
86         if (sect.sct_own != sect.sct_oldown)
87             pr("%3d",  sect.sct_oldown);
88         else
89             pr("   ");
90
91         pr("%5d", sect.sct_item[I_CIVIL]);
92         pr("%5d", sect.sct_item[I_MILIT]);
93         pr("%5d", sect.sct_item[I_UW]);
94         pr("%5d", sect.sct_item[I_FOOD]);
95         pr("%4d%%", sect.sct_work);
96         pr("%5d", sect.sct_avail);
97         if (!player->god) {
98             if (sect.sct_terr)
99                 pr("%4d", sect.sct_terr);
100             else
101                 pr("    ");
102         }
103         pr("%5d", opt_FALLOUT ? sect.sct_fallout : 0);
104         if (sect.sct_coastal)
105             pr("%4d", sect.sct_coastal);
106         pr("\n");
107     }
108     if (nsect == 0) {
109         if (player->argp[1])
110             pr("%s: No sector(s)\n", player->argp[1]);
111         else
112             pr("%s: No sector(s)\n", "");
113         return RET_FAIL;
114     } else
115         pr("%d sector%s\n", nsect, splur(nsect));
116     return 0;
117 }
118
119 static void
120 cens_hdr(void)
121 {
122     if (player->god)
123         pr("    ");
124     pr("CENSUS                   del dst\n");
125     if (player->god)
126         pr("own ");
127     pr("  sect        eff ");
128     pr("prd ");
129     pr("mob uf uf old  civ  mil   uw food work avail ");
130     if (!player->god)
131         pr("ter ");
132     pr("fall coa\n");
133 }