8 * Dump everything under the sun
10 * Static game data (configuration):
11 * - Item characteristics: ichr[]
12 * - Land unit characteristics: lchr[]
13 * - Nuke characteristics: nchr[]
14 * - Plane characteristics: plchr[]
15 * - Product characteristics: pchr[]
16 * - Sector designation characteristics: dchr[]
17 * - Sector infrastructure characteristics: intrchr[]
18 * - Ship characteristics: mchr[]
20 * - News item characteristics: rpt[]
21 * - Treaty clause characteristics: tchr[]
23 * - Options: Options[]
24 * - Configuration: configkeys[]
27 * - Sectors: EF_SECTOR, sect_ca[] (already have dump)
28 * - Land units: EF_LAND, land_ca[] (already have ldump)
29 * - Lost: EF_LOST, lost_ca[] (already have lost)
30 * - Nukes: EF_NUKE, nuke_ca[] (already have ndump)
31 * - Planes: EF_PLANE, plane_ca[] (already have pdump)
32 * - Ships: EF_SHIP, ship_ca[] (already have sdump)
33 * - News: EF_NEWS, news_ca[]
34 * - Treaties: EF_TREATY, treaty_ca[]
36 * - Nations: EF_NATION, nat_ca[]
37 * - Loans: EF_LOAN, loan_ca[]
40 * - Market: EF_COMM, commodity_ca[]
43 static struct castr ichr_ca[] = {
44 {NSC_STRING, 0, 0, offsetof(struct ichrstr, i_name), "name"},
45 {NSC_INT, 0, 0, offsetof(struct ichrstr, i_mnem), "mnem"},
46 {NSC_INT, 0, 0, offsetof(struct ichrstr, i_vtype), "vtype"},
47 {NSC_INT, 0, 0, offsetof(struct ichrstr, i_value), "value"},
48 {NSC_INT, 0, 0, offsetof(struct ichrstr, i_sell), "sell"},
49 {NSC_INT, 0, 0, offsetof(struct ichrstr, i_lbs), "lbs"},
50 {NSC_INT, 0, NUMPKG, offsetof(struct ichrstr, i_pkg), "pkg"},
51 {NSC_NOTYPE, 0, 0, 0, NULL}
54 static struct castr mchr_ca[] = {
55 {NSC_STRING, 0, 0, offsetof(struct mchrstr, m_name), "name"},
56 {NSC_USHORT, 0, I_MAX+1, offsetof(struct mchrstr, m_item), "item"},
57 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_lcm), "lcm"},
58 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_hcm), "hcm"},
59 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_armor), "armor"},
60 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_speed), "speed"},
61 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_visib), "visib"},
62 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_vrnge), "vrnge"},
63 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_glim), "glim"},
64 {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nxlight), "nxlight"},
65 {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nchoppers), "nchoppers"},
66 {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_fuelc), "fuelc"},
67 {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_fuelu), "fuelu"},
68 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_tech), "tech"},
69 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_cost), "cost"},
70 {NSC_INT, 0, 0, offsetof(struct mchrstr, m_flags), "flags"},
71 {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nplanes), "nplanes"},
72 {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nland), "nland"},
73 {NSC_NOTYPE, 0, 0, 0, NULL}
76 static struct castr pchr_ca[] = {
77 {NSC_STRING, 0, 0, offsetof(struct pchrstr, p_name), "name"},
78 {NSC_STRING, 0, 0, offsetof(struct pchrstr, p_sname), "sname"},
79 {NSC_UCHAR, 0, MAXPRCON, offsetof(struct pchrstr, p_ctype), "ctype"},
80 {NSC_USHORT, 0, MAXPRCON, offsetof(struct pchrstr, p_camt), "camt"},
81 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_type), "type"},
82 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_level), "level"},
83 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_cost), "cost"},
84 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nrndx), "nrndx"},
85 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nrdep), "nrdep"},
86 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nlndx), "nlndx"},
87 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nlmin), "nlmin"},
88 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nllag), "nllag"},
89 {NSC_INT, 0, 0, offsetof(struct pchrstr, p_effic), "effic"},
90 {NSC_NOTYPE, 0, 0, 0, NULL}
93 static struct castr plchr_ca[] = {
94 {NSC_STRING, 0, 0, offsetof(struct plchrstr, pl_name), "name"},
95 {NSC_STRING, 0, 0, offsetof(struct plchrstr, pl_planename), "planename"},
96 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_lcm), "lcm"},
97 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_hcm), "hcm"},
98 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_cost), "cost"},
99 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_tech), "tech"},
100 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_acc), "acc"},
101 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_load), "load"},
102 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_att), "att"},
103 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_def), "def"},
104 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_range), "range"},
105 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_crew), "crew"},
106 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_fuel), "fuel"},
107 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_stealth), "stealth"},
108 {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_flags), "flags"},
109 {NSC_NOTYPE, 0, 0, 0, NULL}
112 static struct castr lchr_ca[] = {
113 {NSC_STRING, 0, 0, offsetof(struct lchrstr, l_name), "name"},
114 {NSC_USHORT, 0, I_MAX+1, offsetof(struct mchrstr, m_item), "item"},
115 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_lcm), "lcm"},
116 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_hcm), "hcm"},
117 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_gun), "gun"},
118 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_shell), "shell"},
119 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_tech), "tech"},
120 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_cost), "cost"},
121 {NSC_FLOAT, 0, 0, offsetof(struct lchrstr, l_att), "att"},
122 {NSC_FLOAT, 0, 0, offsetof(struct lchrstr, l_def), "def"},
123 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_vul), "vul"},
124 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_spd), "spd"},
125 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_vis), "vis"},
126 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_spy), "spy"},
127 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_rad), "rad"},
128 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_frg), "frg"},
129 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_acc), "acc"},
130 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_dam), "dam"},
131 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_ammo), "ammo"},
132 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_aaf), "aaf"},
133 {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_fuelc), "fuelc"},
134 {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_fuelu), "fuelu"},
135 {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_nxlight), "nxlight"},
136 {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_mxland), "mxland"},
137 {NSC_INT, 0, 0, offsetof(struct lchrstr, l_flags), "flags"},
138 {NSC_NOTYPE, 0, 0, 0, NULL}
141 static struct castr nchr_ca[] = {
142 {NSC_STRING, 0, 0, offsetof(struct nchrstr, n_name), "name"},
143 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_lcm), "lcm"},
144 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_hcm), "hcm"},
145 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_oil), "oil"},
146 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_rad), "rad"},
147 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_blast), "blast"},
148 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_dam), "dam"},
149 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_cost), "cost"},
150 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_tech), "tech"},
151 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_weight), "weight"},
152 {NSC_INT, 0, 0, offsetof(struct nchrstr, n_flags), "flags"},
153 {NSC_NOTYPE, 0, 0, 0, NULL}
163 static struct camap chr_camap[] = {
164 {"item", ichr_ca, ichr, sizeof(ichr[0])},
165 {"product", pchr_ca, pchr, sizeof(pchr[0])},
166 {"ship chr", mchr_ca, mchr, sizeof(mchr[0])},
167 {"plane chr", plchr_ca, plchr, sizeof(plchr[0])},
168 {"land chr", lchr_ca, lchr, sizeof(lchr[0])},
169 {"nuke chr", nchr_ca, nchr, sizeof(nchr[0])},
170 {NULL, NULL, NULL, 0}
174 chridx_by_name(char *name)
176 return stmtch(name, chr_camap, offsetof(struct camap, name),
177 sizeof(chr_camap[0]));
180 static struct valstr *
181 xdeval(struct valstr *val, nsc_type type, ptrdiff_t off, void *item, int idx)
183 val->val_type = type;
184 val->val_cat = NSC_OFF;
185 val->val_as_type = -1;
186 val->val_as.sym.off = off;
187 val->val_as.sym.idx = idx;
188 nstr_exec_val(val, player->cnum, item, 0);
189 return val; /* FIXME nstr_exec_val() should return VAL */
193 xdprval(struct valstr *val, char *sep)
197 switch (val->val_type) {
199 pr("%s%ld", sep, val->val_as.lng);
202 pr("%s%g", sep, val->val_as.dbl);
208 for (e = s; *e != '"' && isprint(*e); ++e) ;
210 for (; *e && !isprint(*e); ++e) {
222 xdflds(struct castr ca[], void *item)
228 for (i = 0; ca[i].ca_name; ++i) {
229 if (ca[i].ca_flags & NSC_DEITY && !player->god)
233 xdeval(&val, ca[i].ca_type, ca[i].ca_off, item, j);
234 sep = xdprval(&val, sep);
235 } while (++j < ca[i].ca_len);
240 xdhdrs(struct castr ca[])
245 for (i = 0; ca[i].ca_name; ++i) {
246 if (ca[i].ca_flags & NSC_DEITY && !player->god)
248 pr("%s%s", sep, ca[i].ca_name);
250 pr(" %d", ca[i].ca_len);
256 xdhdr(char *name, struct castr ca[])
259 pr("DUMP %s %ld\n", name, (long)time(NULL));
268 pr("dumped %d\n", n);
272 xditem(int type, char *arg)
277 s_char buf[2048]; /* FIXME buffer size? */
283 if (!snxtitem(&ni, type, arg))
286 xdhdr(ef_nameof(type), ca);
289 while (nxtitem(&ni, buf)) {
312 cm = &chr_camap[chridx];
314 xdhdr(cm->name, cm->ca);
317 for (p = cm->chr; ; p += cm->size) {
318 val.val_type = cm->ca[0].ca_type;
319 val.val_cat = NSC_OFF;
320 val.val_as_type = -1;
321 val.val_as.sym.off = cm->ca[0].ca_off;
322 val.val_as.sym.idx = 0;
323 nstr_exec_val(&val, player->cnum, p, NSC_STRING);
324 if (!val.val_as.str || !*val.val_as.str)
343 p = getstarg(player->argp[1], "What? ", buf);
349 return xditem(type, player->argp[2]);
350 } else if (!strncmp(p, "chr", strlen(p)) && player->argp[2]) {
351 return xdchr(chridx_by_name(player->argp[2]));