]> git.pond.sub.org Git - empserver/commitdiff
(castr,empfile,ship_chr,plane_chr,land_chr,nuke_chr):
authorRon Koenderink <rkoenderink@yahoo.ca>
Sat, 22 Oct 2005 16:39:45 +0000 (16:39 +0000)
committerRon Koenderink <rkoenderink@yahoo.ca>
Sat, 22 Oct 2005 16:39:45 +0000 (16:39 +0000)
Add table index to castr to create a reference to the symbol table.
Add "ship chr flags" table to empfile.
Add "plane chr flags" table to empfile.
Add "land chr flags" table to empfile.
Add "nuke chr flags" table to empfile.
Add EF_SHIP_CHR_FLAGS reference to ship_chr.
Add EF_PLANE_CHR_FLAGS reference to plane_chr.
Add EF_LAND_CHR_FLAGS reference to land_chr.
Add EF_NUKE_CHR_FLAGS reference to nuke_chr.

(show_ship_capab,show_plane_capab,show_land_capab,
show_nuke_capab,ship_flags,land_flags,plane_flags,nuke_flags):
Move ship_flags nsc.c from show.c
Rename ship_flags to ship_chr_flags.
Move plane_flags nsc.c from show.c
Rename plane_flags to plane_chr_flags.
Move land_flags nsc.c from show.c
Rename land_flags to land_chr_flags.
Move nuke_flags nsc.c from show.c
Rename nuke_flags to nuke_chr_flags.
This is to accomodate future symbol table for EF_PLANE table.

include/file.h
include/nsc.h
src/lib/global/file.c
src/lib/global/nsc.c
src/lib/subs/show.c

index 546d102e2f18a9b8099b7772ddd69ea6e158bde5..91407511ea4e110d07e477c69c0177312e13a0e6 100644 (file)
@@ -108,6 +108,10 @@ struct empfile {
 #define EF_INFRASTRUCTURE   22
 #define EF_PRODUCT     23
 #define EF_TABLE       24
+#define EF_SHIP_CHR_FLAGS      25
+#define EF_PLANE_CHR_FLAGS     26
+#define EF_LAND_CHR_FLAGS      27
+#define EF_NUKE_CHR_FLAGS      28
 
 #define EF_NMAP         222    /* Kinda bogus, but used to describe a newdesmap
                                   instead of bmap or map. */
index 16761f12e2343a1be84a87e25f5910f163ab6e33..a80b632792e04fa52f4aaafd32e78479d3268e6c 100644 (file)
@@ -168,6 +168,14 @@ struct nstr_item {
     struct nscstr cond[NS_NCOND]; /* selection conditions */
 };
 
+/*
+ * Symbol table definition
+ */
+struct lookup {
+    int key;
+    s_char *value;
+};
+
 /*
  * Selector descriptor.
  * Value is at offset CA_OFF in the context object.
@@ -178,6 +186,7 @@ struct castr {
     unsigned short ca_len;     /* non-zero: is an array; #array elements */
     ptrdiff_t ca_off;
     char *ca_name;
+    int ca_table;              /* table index -- symbols, symbol sets */
 };
 
 /* variables using the above */
@@ -205,6 +214,11 @@ extern struct castr nat_ca[];
 extern struct castr intrchr_ca[];
 extern struct castr rpt_ca[];
 extern struct castr empfile_ca[];
+extern struct castr lookup_ca[];
+extern struct lookup ship_chr_flags[];
+extern struct lookup plane_chr_flags[];
+extern struct lookup land_chr_flags[];
+extern struct lookup nuke_chr_flags[];
 
 /* src/lib/subs/nstr.c */
 extern int nstr_comp(struct nscstr *np, int len, int type, char *str);
index 95f70bf3849effd640744eb5386ef63dbdca3560..a25cf47ce317cc31a57abcbc2fef5a9db6c8321b 100644 (file)
@@ -52,6 +52,7 @@
 
 #include "gamesdef.h"
 #include "commodity.h"
+#include "nsc.h"
 
 struct empfile empfile[] = {
     /* Dynamic game data */
@@ -138,6 +139,18 @@ struct empfile empfile[] = {
     {"table", NULL, EFF_MEM,
      0, sizeof(empfile[0]), NULL, NULL, NULL,
      -1, -1, 0, 0, (char *)empfile, 0, empfile_ca},
+    {"ship chr flags", NULL, EFF_MEM,
+     0, sizeof(ship_chr_flags[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)ship_chr_flags, 0, lookup_ca},
+    {"plane chr flags", NULL, EFF_MEM,
+     0, sizeof(plane_chr_flags[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)plane_chr_flags, 0, lookup_ca},
+    {"land chr flags", NULL, EFF_MEM,
+     0, sizeof(land_chr_flags[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)land_chr_flags, 0, lookup_ca},
+    {"nuke chr flags", NULL, EFF_MEM,
+     0, sizeof(nuke_chr_flags[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)nuke_chr_flags, 0, lookup_ca},
 
     /* Sentinel */
     {NULL, NULL, 0,
index 444f51de04248ccf87aee57509771d57ccbde70e..ccbd3e0c385cafe6dac4db1f03ec286a85fba180 100644 (file)
@@ -57,7 +57,7 @@
 
 #define NSC_IELT(name, pfx, sfx, base, itype)          \
 {NSC_SHORT, 0, 0, ((base) + (itype)*sizeof(u_short)),  \
-sizeof(sfx) == 1 ? name : pfx sfx}
+sizeof(sfx) == 1 ? name : pfx sfx, EF_BAD}
 
 #define NSC_IVEC(base, sfx)            \
 NSC_IELT("civil", "c", sfx, base, I_CIVIL),    \
@@ -76,430 +76,505 @@ NSC_IELT("uw", "u", sfx, base, I_UW),             \
 NSC_IELT("rad", "r", sfx, base, I_RAD)
 
 struct castr ichr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct ichrstr, i_name), "name"},
-    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_mnem), "mnem"},
-    {NSC_SITYPE(i_type), 0, 0, offsetof(struct ichrstr, i_vtype), "vtype"},
-    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_value), "value"},
-    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_sell), "sell"},
-    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_lbs), "lbs"},
-    {NSC_INT, 0, NUMPKG, offsetof(struct ichrstr, i_pkg), "pkg"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct ichrstr, i_name), "name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_mnem), "mnem", EF_BAD},
+    {NSC_SITYPE(i_type), 0, 0, offsetof(struct ichrstr, i_vtype), "vtype", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_value), "value", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_sell), "sell", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct ichrstr, i_lbs), "lbs", EF_BAD},
+    {NSC_INT, 0, NUMPKG, offsetof(struct ichrstr, i_pkg), "pkg", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr pchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct pchrstr, p_name), "name"},
-    {NSC_STRING, 0, 0, offsetof(struct pchrstr, p_sname), "sname"},
-    {NSC_SITYPE(i_type), 0, MAXPRCON, offsetof(struct pchrstr, p_ctype), "ctype"},
-    {NSC_USHORT, 0, MAXPRCON, offsetof(struct pchrstr, p_camt), "camt"},
-    {NSC_SITYPE(i_type), 0, 0, offsetof(struct pchrstr, p_type), "type"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_level), "level"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_cost), "cost"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nrndx), "nrndx"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nrdep), "nrdep"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nlndx), "nlndx"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nlmin), "nlmin"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nllag), "nllag"},
-    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_effic), "effic"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct pchrstr, p_name), "name", EF_BAD},
+    {NSC_STRING, 0, 0, offsetof(struct pchrstr, p_sname), "sname", EF_BAD},
+    {NSC_SITYPE(i_type), 0, MAXPRCON, offsetof(struct pchrstr, p_ctype), "ctype", EF_BAD},
+    {NSC_USHORT, 0, MAXPRCON, offsetof(struct pchrstr, p_camt), "camt", EF_BAD},
+    {NSC_SITYPE(i_type), 0, 0, offsetof(struct pchrstr, p_type), "type", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_level), "level", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_cost), "cost", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nrndx), "nrndx", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nrdep), "nrdep", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nlndx), "nlndx", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nlmin), "nlmin", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_nllag), "nllag", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct pchrstr, p_effic), "effic", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr sect_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(sctstr, sct_own), "owner"},
-    {NSC_XCOORD, 0, 0, fldoff(sctstr, sct_x), "xloc"},
-    {NSC_YCOORD, 0, 0, fldoff(sctstr, sct_y), "yloc"},
-    {NSC_TYPEID, 0, 0, fldoff(sctstr, sct_type), "des"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_effic), "effic"},
-    {NSC_SHORT, 0, 0, fldoff(sctstr, sct_mobil), "mobil"},
-    {NSC_UCHAR, NSC_DEITY, 0, fldoff(sctstr, sct_loyal), "loyal"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr), "terr"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(sctstr, sct_terr), "terr0"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr1), "terr1"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr2), "terr2"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr3), "terr3"},
-    {NSC_XCOORD, 0, 0, fldoff(sctstr, sct_dist_x), "xdist"},
-    {NSC_YCOORD, 0, 0, fldoff(sctstr, sct_dist_y), "ydist"},
-    {NSC_SHORT, 0, 0, fldoff(sctstr, sct_avail), "avail"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_work), "work"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(sctstr, sct_coastal), "coastal"},
-    {NSC_TYPEID, 0, 0, fldoff(sctstr, sct_newtype), "newdes"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_min), "min"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_gmin), "gold"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_fertil), "fert"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_oil), "ocontent"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_uran), "uran"},
-    {NSC_NATID, 0, 0, fldoff(sctstr, sct_oldown), "oldown"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_off), "off"},
+    {NSC_NATID, 0, 0, fldoff(sctstr, sct_own), "owner", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(sctstr, sct_x), "xloc", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(sctstr, sct_y), "yloc", EF_BAD},
+    {NSC_TYPEID, 0, 0, fldoff(sctstr, sct_type), "des", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_effic), "effic", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(sctstr, sct_mobil), "mobil", EF_BAD},
+    {NSC_UCHAR, NSC_DEITY, 0, fldoff(sctstr, sct_loyal), "loyal", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr), "terr", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(sctstr, sct_terr), "terr0", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr1), "terr1", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr2), "terr2", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_terr3), "terr3", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(sctstr, sct_dist_x), "xdist", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(sctstr, sct_dist_y), "ydist", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(sctstr, sct_avail), "avail", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_work), "work", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(sctstr, sct_coastal), "coastal", EF_BAD},
+    {NSC_TYPEID, 0, 0, fldoff(sctstr, sct_newtype), "newdes", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_min), "min", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_gmin), "gold", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_fertil), "fert", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_oil), "ocontent", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_uran), "uran", EF_BAD},
+    {NSC_NATID, 0, 0, fldoff(sctstr, sct_oldown), "oldown", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_off), "off", EF_BAD},
     NSC_IVEC(fldoff(sctstr, sct_item), ""),
     NSC_IVEC(fldoff(sctstr, sct_dist), "_dist"),
     NSC_IVEC(fldoff(sctstr, sct_del), "_del"),
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(sctstr, sct_mines), "mines"},
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(sctstr, sct_pstage), "pstage"},
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(sctstr, sct_ptime), "ptime"},
-    {NSC_UCHAR, NSC_DEITY, 0, fldoff(sctstr, sct_che), "che"},
-    {NSC_NATID, NSC_DEITY, 0, fldoff(sctstr, sct_che_target), "che_target"},
-    {NSC_USHORT, 0, 0, fldoff(sctstr, sct_fallout), "fallout"},
-    {NSC_TIME, 0, 0, fldoff(sctstr, sct_access), "access"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_road), "road"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_rail), "rail"},
-    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_defense), "dfense"},
-    {NSC_TIME, NSC_EXTRA, 0, fldoff(sctstr, sct_timestamp), "timestamp"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(sctstr, sct_mines), "mines", EF_BAD},
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(sctstr, sct_pstage), "pstage", EF_BAD},
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(sctstr, sct_ptime), "ptime", EF_BAD},
+    {NSC_UCHAR, NSC_DEITY, 0, fldoff(sctstr, sct_che), "che", EF_BAD},
+    {NSC_NATID, NSC_DEITY, 0, fldoff(sctstr, sct_che_target), "che_target", EF_BAD},
+    {NSC_USHORT, 0, 0, fldoff(sctstr, sct_fallout), "fallout", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(sctstr, sct_access), "access", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_road), "road", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_rail), "rail", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(sctstr, sct_defense), "dfense", EF_BAD},
+    {NSC_TIME, NSC_EXTRA, 0, fldoff(sctstr, sct_timestamp), "timestamp", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr dchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct dchrstr, d_name), "name"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_mnem), "mnem"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_prd), "prd"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_mcst), "mcst"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_flg), "flg"},
-    {NSC_SITYPE(i_packing), 0, 0, offsetof(struct dchrstr, d_pkg), "pkg"},
-    {NSC_FLOAT, 0, 0, offsetof(struct dchrstr, d_ostr), "ostr"},
-    {NSC_FLOAT, 0, 0, offsetof(struct dchrstr, d_dstr), "dstr"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_value), "value"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_cost), "cost"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_build), "build"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_lcms), "lcms"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_hcms), "hcms"},
-    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_maxpop), "maxpop"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct dchrstr, d_name), "name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_mnem), "mnem", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_prd), "prd", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_mcst), "mcst", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_flg), "flg", EF_BAD},
+    {NSC_SITYPE(i_packing), 0, 0, offsetof(struct dchrstr, d_pkg), "pkg", EF_BAD},
+    {NSC_FLOAT, 0, 0, offsetof(struct dchrstr, d_ostr), "ostr", EF_BAD},
+    {NSC_FLOAT, 0, 0, offsetof(struct dchrstr, d_dstr), "dstr", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_value), "value", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_cost), "cost", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_build), "build", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_lcms), "lcms", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_hcms), "hcms", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct dchrstr, d_maxpop), "maxpop", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 #define NSC_GENITEM                                            \
-{ NSC_NATID, 0, 0, fldoff(genitem, own), "owner"},             \
-{ NSC_SHORT, 0, 0, fldoff(genitem, uid), "uid"},               \
-{ NSC_XCOORD, 0, 0, fldoff(genitem, x), "xloc"},               \
-{ NSC_YCOORD, 0, 0, fldoff(genitem, y), "yloc"},               \
-{ NSC_TYPEID, 0, 0, fldoff(genitem, type), "type"},            \
-{ NSC_CHAR, 0, 0, fldoff(genitem, effic), "effic"},            \
-{ NSC_CHAR , 0, 0, fldoff(genitem, mobil), "mobil"},           \
-{ NSC_SHORT, 0, 0, fldoff(genitem, tech), "tech"},             \
-{ NSC_CHAR, NSC_EXTRA, 0, fldoff(genitem, group), "group"},    \
-{ NSC_XCOORD, 0, 0, fldoff(genitem, opx), "opx"},              \
-{ NSC_YCOORD, 0, 0, fldoff(genitem, opy), "opy"},              \
-{ NSC_SHORT, 0, 0, fldoff(genitem, mission), "mission"},       \
+{ NSC_NATID, 0, 0, fldoff(genitem, own), "owner", EF_BAD},             \
+{ NSC_SHORT, 0, 0, fldoff(genitem, uid), "uid", EF_BAD},               \
+{ NSC_XCOORD, 0, 0, fldoff(genitem, x), "xloc", EF_BAD},               \
+{ NSC_YCOORD, 0, 0, fldoff(genitem, y), "yloc", EF_BAD},               \
+{ NSC_TYPEID, 0, 0, fldoff(genitem, type), "type", EF_BAD},            \
+{ NSC_CHAR, 0, 0, fldoff(genitem, effic), "effic", EF_BAD},            \
+{ NSC_CHAR , 0, 0, fldoff(genitem, mobil), "mobil", EF_BAD},           \
+{ NSC_SHORT, 0, 0, fldoff(genitem, tech), "tech", EF_BAD},             \
+{ NSC_CHAR, NSC_EXTRA, 0, fldoff(genitem, group), "group", EF_BAD},    \
+{ NSC_XCOORD, 0, 0, fldoff(genitem, opx), "opx", EF_BAD},              \
+{ NSC_YCOORD, 0, 0, fldoff(genitem, opy), "opy", EF_BAD},              \
+{ NSC_SHORT, 0, 0, fldoff(genitem, mission), "mission", EF_BAD},       \
 { NSC_SHORT, 0, 0, fldoff(genitem, radius), "radius"}
 
 struct castr ship_ca[] = {
     NSC_GENITEM,
-    {NSC_CHAR, 0, 0, fldoff(shpstr, shp_fleet), "fleet"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nplane), "nplane"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nland), "nland"},
-    {NSC_XCOORD, 0, 0, fldoff(shpstr, shp_destx[0]), "xstart"},
-    {NSC_XCOORD, 0, 0, fldoff(shpstr, shp_destx[1]), "xend"},
-    {NSC_YCOORD, 0, 0, fldoff(shpstr, shp_desty[0]), "ystart"},
-    {NSC_YCOORD, 0, 0, fldoff(shpstr, shp_desty[1]), "yend"},
-    {NSC_SITYPE(i_type), 0, TMAX, fldoff(shpstr, shp_tstart), "cargostart"},
-    {NSC_SITYPE(i_type), 0, TMAX, fldoff(shpstr, shp_tend), "cargoend"},
-    {NSC_SHORT, 0, TMAX, fldoff(shpstr, shp_lstart), "amtstart"},
-    {NSC_SHORT, 0, TMAX, fldoff(shpstr, shp_lend), "amtend"},
-    {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_autonav), "autonav"},
+    {NSC_CHAR, 0, 0, fldoff(shpstr, shp_fleet), "fleet", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nplane), "nplane", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nland), "nland", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(shpstr, shp_destx[0]), "xstart", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(shpstr, shp_destx[1]), "xend", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(shpstr, shp_desty[0]), "ystart", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(shpstr, shp_desty[1]), "yend", EF_BAD},
+    {NSC_SITYPE(i_type), 0, TMAX, fldoff(shpstr, shp_tstart), "cargostart", EF_BAD},
+    {NSC_SITYPE(i_type), 0, TMAX, fldoff(shpstr, shp_tend), "cargoend", EF_BAD},
+    {NSC_SHORT, 0, TMAX, fldoff(shpstr, shp_lstart), "amtstart", EF_BAD},
+    {NSC_SHORT, 0, TMAX, fldoff(shpstr, shp_lend), "amtend", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_autonav), "autonav", EF_BAD},
     NSC_IVEC(fldoff(shpstr, shp_item), ""),
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(shpstr, shp_pstage), "pstage"},
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(shpstr, shp_ptime), "ptime"},
-    {NSC_TIME, 0, 0, fldoff(shpstr, shp_access), "access"},
-    {NSC_TIME, NSC_EXTRA, 0, fldoff(shpstr, shp_timestamp), "timestamp"},
-    {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_mobquota), "mquota"},
-    {NSC_STRINGY, 0, MAXSHPPATH, fldoff(shpstr, shp_path), "path"},
-    {NSC_SHORT, 0, 0, fldoff(shpstr, shp_follow), "follow"},
-    {NSC_STRINGY, 0, MAXSHPNAMLEN, fldoff(shpstr, shp_name), "name"},
-    {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_fuel), "fuel"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nchoppers), "nchoppers"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nxlight), "nxlight"},
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(shpstr, shp_pstage), "pstage", EF_BAD},
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(shpstr, shp_ptime), "ptime", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(shpstr, shp_access), "access", EF_BAD},
+    {NSC_TIME, NSC_EXTRA, 0, fldoff(shpstr, shp_timestamp), "timestamp", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_mobquota), "mquota", EF_BAD},
+    {NSC_STRINGY, 0, MAXSHPPATH, fldoff(shpstr, shp_path), "path", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(shpstr, shp_follow), "follow", EF_BAD},
+    {NSC_STRINGY, 0, MAXSHPNAMLEN, fldoff(shpstr, shp_name), "name", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(shpstr, shp_fuel), "fuel", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nchoppers), "nchoppers", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(shpstr, shp_nxlight), "nxlight", EF_BAD},
     /* could let builder access these, but we can't express that yet: */
-    {NSC_XCOORD, NSC_DEITY, 0, fldoff(shpstr, shp_orig_x), "xbuilt"},
-    {NSC_YCOORD, NSC_DEITY, 0, fldoff(shpstr, shp_orig_y), "ybuilt"},
-    {NSC_NATID, NSC_DEITY, 0, fldoff(shpstr, shp_orig_own), "builder"},
-    {NSC_INT, 0, 0, fldoff(shpstr, shp_rflags), "rflags"},
-    {NSC_STRINGY, 0, RET_LEN, fldoff(shpstr, shp_rpath), "rpath"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_XCOORD, NSC_DEITY, 0, fldoff(shpstr, shp_orig_x), "xbuilt", EF_BAD},
+    {NSC_YCOORD, NSC_DEITY, 0, fldoff(shpstr, shp_orig_y), "ybuilt", EF_BAD},
+    {NSC_NATID, NSC_DEITY, 0, fldoff(shpstr, shp_orig_own), "builder", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(shpstr, shp_rflags), "rflags", EF_BAD},
+    {NSC_STRINGY, 0, RET_LEN, fldoff(shpstr, shp_rpath), "rpath", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr mchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct mchrstr, m_name), "name"},
-    {NSC_USHORT, 0, I_MAX+1, offsetof(struct mchrstr, m_item), "item"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_lcm), "lcm"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_hcm), "hcm"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_armor), "armor"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_speed), "speed"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_visib), "visib"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_vrnge), "vrnge"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_frnge), "frnge"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_glim), "glim"},
-    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nxlight), "nxlight"},
-    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nchoppers), "nchoppers"},
-    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_fuelc), "fuelc"},
-    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_fuelu), "fuelu"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_tech), "tech"},
-    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_cost), "cost"},
-    {NSC_LONG, 0, 0, offsetof(struct mchrstr, m_flags), "flags"},
-    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nplanes), "nplanes"},
-    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nland), "nland"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct mchrstr, m_name), "name", EF_BAD},
+    {NSC_USHORT, 0, I_MAX+1, offsetof(struct mchrstr, m_item), "item", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_lcm), "lcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_hcm), "hcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_armor), "armor", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_speed), "speed", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_visib), "visib", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_vrnge), "vrnge", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_frnge), "frnge", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_glim), "glim", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nxlight), "nxlight", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nchoppers), "nchoppers", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_fuelc), "fuelc", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_fuelu), "fuelu", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_tech), "tech", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct mchrstr, m_cost), "cost", EF_BAD},
+    {NSC_LONG, 0, 0, offsetof(struct mchrstr, m_flags), "flags", EF_SHIP_CHR_FLAGS},
+    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nplanes), "nplanes", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct mchrstr, m_nland), "nland", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr plane_ca[] = {
     NSC_GENITEM,
-    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_wing), "wing"},
-    {NSC_UCHAR, 0, 0, fldoff(plnstr, pln_range), "range"},
-    {NSC_SHORT, 0, 0, fldoff(plnstr, pln_ship), "ship"},
-    {NSC_SHORT, 0, 0, fldoff(plnstr, pln_land), "land"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(plnstr, pln_att), "att"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(plnstr, pln_def), "def"},
-    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_harden), "harden"},
-    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_nuketype), "nuketype"},
-    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_flags), "flags"},
-    {NSC_TIME, 0, 0, fldoff(plnstr, pln_access), "access"},
-    {NSC_TIME, NSC_EXTRA, 0, fldoff(plnstr, pln_timestamp), "timestamp"},
-    {NSC_FLOAT, 0, 0, fldoff(plnstr, pln_theta), "theta"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_wing), "wing", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(plnstr, pln_range), "range", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(plnstr, pln_ship), "ship", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(plnstr, pln_land), "land", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(plnstr, pln_att), "att", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(plnstr, pln_def), "def", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_harden), "harden", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_nuketype), "nuketype", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(plnstr, pln_flags), "flags", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(plnstr, pln_access), "access", EF_BAD},
+    {NSC_TIME, NSC_EXTRA, 0, fldoff(plnstr, pln_timestamp), "timestamp", EF_BAD},
+    {NSC_FLOAT, 0, 0, fldoff(plnstr, pln_theta), "theta", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr plchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct plchrstr, pl_name), "name"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_lcm), "lcm"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_hcm), "hcm"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_cost), "cost"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_tech), "tech"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_acc), "acc"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_load), "load"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_att), "att"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_def), "def"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_range), "range"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_crew), "crew"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_fuel), "fuel"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_stealth), "stealth"},
-    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_flags), "flags"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct plchrstr, pl_name), "name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_lcm), "lcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_hcm), "hcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_cost), "cost", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_tech), "tech", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_acc), "acc", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_load), "load", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_att), "att", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_def), "def", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_range), "range", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_crew), "crew", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_fuel), "fuel", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_stealth), "stealth", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct plchrstr, pl_flags), "flags", EF_PLANE_CHR_FLAGS},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr land_ca[] = {
     NSC_GENITEM,
-    {NSC_CHAR, 0, 0, fldoff(lndstr, lnd_army), "army"},
-    {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_ship), "ship"},
-    {NSC_CHAR, 0, 0, fldoff(lndstr, lnd_harden), "harden"},
-    {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_retreat), "retreat"},
-    {NSC_UCHAR, 0, 0, fldoff(lndstr, lnd_fuel), "fuel"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_nxlight), "nxlight"},
-    {NSC_INT, 0, 0, fldoff(lndstr, lnd_rflags), "rflags"},
-    {NSC_STRINGY, 0, RET_LEN, fldoff(lndstr, lnd_rpath), "rpath"},
-    {NSC_UCHAR, 0, 0, fldoff(lndstr, lnd_rad_max), "react"},
+    {NSC_CHAR, 0, 0, fldoff(lndstr, lnd_army), "army", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_ship), "ship", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(lndstr, lnd_harden), "harden", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_retreat), "retreat", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(lndstr, lnd_fuel), "fuel", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_nxlight), "nxlight", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(lndstr, lnd_rflags), "rflags", EF_BAD},
+    {NSC_STRINGY, 0, RET_LEN, fldoff(lndstr, lnd_rpath), "rpath", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(lndstr, lnd_rad_max), "react", EF_BAD},
     NSC_IVEC(fldoff(lndstr, lnd_item), ""),
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(lndstr, lnd_pstage), "pstage"},
-    {NSC_SHORT, NSC_DEITY, 0, fldoff(lndstr, lnd_ptime), "ptime"},
-    {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_land), "land"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_nland), "nland"},
-    {NSC_TIME, 0, 0, fldoff(lndstr, lnd_access), "access"},
-    {NSC_FLOAT, NSC_EXTRA, 0, fldoff(lndstr, lnd_att), "att"},
-    {NSC_FLOAT, NSC_EXTRA, 0, fldoff(lndstr, lnd_def), "def"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_vul), "vul"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_spd), "spd"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_vis), "vis"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_spy), "spy"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_rad), "rmax"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_frg), "frg"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_acc), "acc"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_dam), "dam"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_ammo), "ammo"},
-    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_aaf), "aaf"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_fuelc), "fuelc"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_fuelu), "fuelu"},
-    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_maxlight), "maxlight"},
-    {NSC_TIME, NSC_EXTRA, 0, fldoff(lndstr, lnd_timestamp), "timestamp"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(lndstr, lnd_pstage), "pstage", EF_BAD},
+    {NSC_SHORT, NSC_DEITY, 0, fldoff(lndstr, lnd_ptime), "ptime", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(lndstr, lnd_land), "land", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_nland), "nland", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(lndstr, lnd_access), "access", EF_BAD},
+    {NSC_FLOAT, NSC_EXTRA, 0, fldoff(lndstr, lnd_att), "att", EF_BAD},
+    {NSC_FLOAT, NSC_EXTRA, 0, fldoff(lndstr, lnd_def), "def", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_vul), "vul", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_spd), "spd", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_vis), "vis", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_spy), "spy", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_rad), "rmax", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_frg), "frg", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_acc), "acc", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_dam), "dam", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_ammo), "ammo", EF_BAD},
+    {NSC_INT, NSC_EXTRA, 0, fldoff(lndstr, lnd_aaf), "aaf", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_fuelc), "fuelc", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_fuelu), "fuelu", EF_BAD},
+    {NSC_UCHAR, NSC_EXTRA, 0, fldoff(lndstr, lnd_maxlight), "maxlight", EF_BAD},
+    {NSC_TIME, NSC_EXTRA, 0, fldoff(lndstr, lnd_timestamp), "timestamp", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr lchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct lchrstr, l_name), "name"},
-    {NSC_USHORT, 0, I_MAX+1, offsetof(struct mchrstr, m_item), "item"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_lcm), "lcm"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_hcm), "hcm"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_gun), "gun"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_shell), "shell"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_tech), "tech"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_cost), "cost"},
-    {NSC_FLOAT, 0, 0, offsetof(struct lchrstr, l_att), "att"},
-    {NSC_FLOAT, 0, 0, offsetof(struct lchrstr, l_def), "def"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_vul), "vul"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_spd), "spd"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_vis), "vis"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_spy), "spy"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_rad), "rad"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_frg), "frg"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_acc), "acc"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_dam), "dam"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_ammo), "ammo"},
-    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_aaf), "aaf"},
-    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_fuelc), "fuelc"},
-    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_fuelu), "fuelu"},
-    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_nxlight), "nxlight"},
-    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_mxland), "mxland"},
-    {NSC_LONG, 0, 0, offsetof(struct lchrstr, l_flags), "flags"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct lchrstr, l_name), "name", EF_BAD},
+    {NSC_USHORT, 0, I_MAX+1, offsetof(struct mchrstr, m_item), "item", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_lcm), "lcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_hcm), "hcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_gun), "gun", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_shell), "shell", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_tech), "tech", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_cost), "cost", EF_BAD},
+    {NSC_FLOAT, 0, 0, offsetof(struct lchrstr, l_att), "att", EF_BAD},
+    {NSC_FLOAT, 0, 0, offsetof(struct lchrstr, l_def), "def", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_vul), "vul", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_spd), "spd", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_vis), "vis", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_spy), "spy", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_rad), "rad", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_frg), "frg", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_acc), "acc", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_dam), "dam", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_ammo), "ammo", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lchrstr, l_aaf), "aaf", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_fuelc), "fuelc", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_fuelu), "fuelu", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_nxlight), "nxlight", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct lchrstr, l_mxland), "mxland", EF_BAD},
+    {NSC_LONG, 0, 0, offsetof(struct lchrstr, l_flags), "flags", EF_LAND_CHR_FLAGS},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr nuke_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(nukstr, nuk_own), "owner"},
-    {NSC_SHORT, 0, 0, fldoff(nukstr, nuk_uid), "uid"},
-    {NSC_XCOORD, 0, 0, fldoff(nukstr, nuk_x), "xloc"},
-    {NSC_YCOORD, 0, 0, fldoff(nukstr, nuk_y), "yloc"},
-    {NSC_CHAR, 0, 0, fldoff(nukstr, nuk_n), "number"},
-    {NSC_SHORT, 0, N_MAXNUKE, fldoff(nukstr, nuk_types), "types"},
-    {NSC_TIME, NSC_EXTRA, 0, fldoff(nukstr, nuk_timestamp), "timestamp"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_NATID, 0, 0, fldoff(nukstr, nuk_own), "owner", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(nukstr, nuk_uid), "uid", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(nukstr, nuk_x), "xloc", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(nukstr, nuk_y), "yloc", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(nukstr, nuk_n), "number", EF_BAD},
+    {NSC_SHORT, 0, N_MAXNUKE, fldoff(nukstr, nuk_types), "types", EF_BAD},
+    {NSC_TIME, NSC_EXTRA, 0, fldoff(nukstr, nuk_timestamp), "timestamp", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr nchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct nchrstr, n_name), "name"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_lcm), "lcm"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_hcm), "hcm"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_oil), "oil"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_rad), "rad"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_blast), "blast"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_dam), "dam"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_cost), "cost"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_tech), "tech"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_weight), "weight"},
-    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_flags), "flags"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct nchrstr, n_name), "name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_lcm), "lcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_hcm), "hcm", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_oil), "oil", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_rad), "rad", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_blast), "blast", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_dam), "dam", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_cost), "cost", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_tech), "tech", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_weight), "weight", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct nchrstr, n_flags), "flags", EF_NUKE_CHR_FLAGS},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr treaty_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(trtstr, trt_cna), "cna"},
-    {NSC_NATID, 0, 0, fldoff(trtstr, trt_cnb), "cnb"},
-    {NSC_CHAR, 0, 0, fldoff(trtstr, trt_status), "status"},
-    {NSC_SHORT, 0, 0, fldoff(trtstr, trt_acond), "acond"},
-    {NSC_SHORT, 0, 0, fldoff(trtstr, trt_bcond), "bcond"},
-    {NSC_TIME, 0, 0, fldoff(trtstr, trt_exp), "exp"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_NATID, 0, 0, fldoff(trtstr, trt_cna), "cna", EF_BAD},
+    {NSC_NATID, 0, 0, fldoff(trtstr, trt_cnb), "cnb", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(trtstr, trt_status), "status", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(trtstr, trt_acond), "acond", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(trtstr, trt_bcond), "bcond", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(trtstr, trt_exp), "exp", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr tchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct tchrstr, t_name), "name"},
-    {NSC_INT, 0, 0, offsetof(struct tchrstr, t_cond), "cond"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct tchrstr, t_name), "name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct tchrstr, t_cond), "cond", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr loan_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(lonstr, l_loner), "loaner"},
-    {NSC_SHORT, 0, 0, fldoff(lonstr, l_uid), "uid"},
-    {NSC_NATID, 0, 0, fldoff(lonstr, l_lonee), "loanee"},
-    {NSC_CHAR, 0, 0, fldoff(lonstr, l_status), "status"},
-    {NSC_INT, 0, 0, fldoff(lonstr, l_irate), "irate"},
-    {NSC_INT, 0, 0, fldoff(lonstr, l_ldur), "ldur"},
-    {NSC_LONG, 0, 0, fldoff(lonstr, l_amtpaid), "amtpaid"},
-    {NSC_LONG, 0, 0, fldoff(lonstr, l_amtdue), "amtdue"},
-    {NSC_TIME, 0, 0, fldoff(lonstr, l_lastpay), "lastpay"},
-    {NSC_TIME, 0, 0, fldoff(lonstr, l_duedate), "duedate"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_NATID, 0, 0, fldoff(lonstr, l_loner), "loaner", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(lonstr, l_uid), "uid", EF_BAD},
+    {NSC_NATID, 0, 0, fldoff(lonstr, l_lonee), "loanee", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(lonstr, l_status), "status", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(lonstr, l_irate), "irate", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(lonstr, l_ldur), "ldur", EF_BAD},
+    {NSC_LONG, 0, 0, fldoff(lonstr, l_amtpaid), "amtpaid", EF_BAD},
+    {NSC_LONG, 0, 0, fldoff(lonstr, l_amtdue), "amtdue", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(lonstr, l_lastpay), "lastpay", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(lonstr, l_duedate), "duedate", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr news_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(nwsstr, nws_ano), "actor"},
-    {NSC_SHORT, 0, 0, fldoff(nwsstr, nws_uid), "uid"},
-    {NSC_CHAR, 0, 0, fldoff(nwsstr, nws_vrb), "action"},
-    {NSC_NATID, 0, 0, fldoff(nwsstr, nws_vno), "victim"},
-    {NSC_CHAR, 0, 0, fldoff(nwsstr, nws_ntm), "times"},
-    {NSC_TIME, 0, 0, fldoff(nwsstr, nws_when), "time"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_NATID, 0, 0, fldoff(nwsstr, nws_ano), "actor", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(nwsstr, nws_uid), "uid", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(nwsstr, nws_vrb), "action", EF_BAD},
+    {NSC_NATID, 0, 0, fldoff(nwsstr, nws_vno), "victim", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(nwsstr, nws_ntm), "times", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(nwsstr, nws_when), "time", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr lost_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(loststr, lost_owner), "owner"},
-    {NSC_INT, 0, 0, fldoff(loststr, lost_uid), "uid"},
-    {NSC_CHAR, 0, 0, fldoff(loststr, lost_type), "type"},
-    {NSC_SHORT, 0, 0, fldoff(loststr, lost_id), "id"},
-    {NSC_XCOORD, 0, 0, fldoff(loststr, lost_x), "x"},
-    {NSC_YCOORD, 0, 0, fldoff(loststr, lost_y), "y"},
-    {NSC_TIME, 0, 0, fldoff(loststr, lost_timestamp), "timestamp"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_NATID, 0, 0, fldoff(loststr, lost_owner), "owner", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(loststr, lost_uid), "uid", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(loststr, lost_type), "type", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(loststr, lost_id), "id", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(loststr, lost_x), "x", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(loststr, lost_y), "y", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(loststr, lost_timestamp), "timestamp", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr commodity_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(comstr, com_owner), "owner"},
-    {NSC_SHORT, 0, 0, fldoff(comstr, com_uid), "uid"},
-    {NSC_SITYPE(i_type), 0, 0, fldoff(comstr, com_type), "type"},
-    {NSC_INT, 0, 0, fldoff(comstr, com_amount), "amount"},
-    {NSC_INT, 0, 0, fldoff(comstr, com_maxbidder), "maxbidder"},
-    {NSC_TIME, 0, 0, fldoff(comstr, com_markettime), "markettime"},
+    {NSC_NATID, 0, 0, fldoff(comstr, com_owner), "owner", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(comstr, com_uid), "uid", EF_BAD},
+    {NSC_SITYPE(i_type), 0, 0, fldoff(comstr, com_type), "type", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(comstr, com_amount), "amount", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(comstr, com_maxbidder), "maxbidder", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(comstr, com_markettime), "markettime", EF_BAD},
     /* could let maxbidder access these, but we can't express that yet: */
-    {NSC_XCOORD, NSC_DEITY, 0, fldoff(comstr, com_x), "xbuy"},
-    {NSC_XCOORD, NSC_DEITY, 0, fldoff(comstr, com_y), "ybuy"},
+    {NSC_XCOORD, NSC_DEITY, 0, fldoff(comstr, com_x), "xbuy", EF_BAD},
+    {NSC_XCOORD, NSC_DEITY, 0, fldoff(comstr, com_y), "ybuy", EF_BAD},
     /* could let the owner access these, but we can't express that yet: */
-    {NSC_XCOORD, NSC_DEITY, 0, fldoff(comstr, sell_x), "xsell"},
-    {NSC_YCOORD, NSC_DEITY, 0, fldoff(comstr, sell_y), "ysell"},
-    {NSC_FLOAT, 0, 0, fldoff(comstr, com_price), "price"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_XCOORD, NSC_DEITY, 0, fldoff(comstr, sell_x), "xsell", EF_BAD},
+    {NSC_YCOORD, NSC_DEITY, 0, fldoff(comstr, sell_y), "ysell", EF_BAD},
+    {NSC_FLOAT, 0, 0, fldoff(comstr, com_price), "price", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr trade_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(trdstr, trd_owner), "owner"},
-    {NSC_SHORT, 0, 0, fldoff(trdstr, trd_uid), "uid"},
-    {NSC_CHAR, 0, 0, fldoff(trdstr, trd_type), "type"},
-    {NSC_SHORT, 0, 0, fldoff(trdstr, trd_unitid), "unitid"},
-    {NSC_LONG, 0, 0, fldoff(trdstr, trd_price), "price"},
-    {NSC_INT, 0, 0, fldoff(trdstr, trd_maxbidder), "maxbidder"},
-    {NSC_TIME, 0, 0, fldoff(trdstr, trd_markettime), "markettime"},
+    {NSC_NATID, 0, 0, fldoff(trdstr, trd_owner), "owner", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(trdstr, trd_uid), "uid", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(trdstr, trd_type), "type", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(trdstr, trd_unitid), "unitid", EF_BAD},
+    {NSC_LONG, 0, 0, fldoff(trdstr, trd_price), "price", EF_BAD},
+    {NSC_INT, 0, 0, fldoff(trdstr, trd_maxbidder), "maxbidder", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(trdstr, trd_markettime), "markettime", EF_BAD},
     /* could let the owner access these, but we can't express that yet: */
-    {NSC_XCOORD, NSC_DEITY, 0, fldoff(trdstr, trd_x), "xloc"},
-    {NSC_YCOORD, NSC_DEITY, 0, fldoff(trdstr, trd_y), "yloc"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_XCOORD, NSC_DEITY, 0, fldoff(trdstr, trd_x), "xloc", EF_BAD},
+    {NSC_YCOORD, NSC_DEITY, 0, fldoff(trdstr, trd_y), "yloc", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr nat_ca[] = {
-    {NSC_NATID, 0, 0, fldoff(natstr, nat_cnum), "cnum"},
-    {NSC_CHAR, 0, 0, fldoff(natstr, nat_stat), "stat"},
-    {NSC_STRINGY, 0, 20, fldoff(natstr, nat_cnam), "cname"},
-    {NSC_STRINGY, NSC_DEITY, 20, fldoff(natstr, nat_pnam), "passwd"},
-    {NSC_STRINGY, 0, 32, fldoff(natstr, nat_hostaddr), "ip"},
-    {NSC_STRINGY, 0, 512, fldoff(natstr, nat_hostname), "hostname"},
-    {NSC_STRINGY, 0, 32, fldoff(natstr, nat_userid), "userid"},
-    {NSC_XCOORD, 0, 0, fldoff(natstr, nat_xstart), "xstart"},
-    {NSC_YCOORD, 0, 0, fldoff(natstr, nat_ystart), "ystart"},
-    {NSC_XCOORD, 0, 0, fldoff(natstr, nat_xcap), "xcap"},
-    {NSC_YCOORD, 0, 0, fldoff(natstr, nat_ycap), "ycap"},
-    {NSC_XCOORD, NSC_DEITY, 0, fldoff(natstr, nat_xorg), "xorg"},
-    {NSC_YCOORD, NSC_DEITY, 0, fldoff(natstr, nat_yorg), "yorg"},
-    {NSC_CHAR, 0, 0, fldoff(natstr, nat_update), "update"},
-    {NSC_UCHAR, 0, 0, fldoff(natstr, nat_missed), "missed"},
-    {NSC_USHORT, 0, 0, fldoff(natstr, nat_tgms), "tgms"},
-    {NSC_USHORT, 0, 0, fldoff(natstr, nat_ann), "ann"},
-    {NSC_USHORT, 0, 0, fldoff(natstr, nat_minused), "minused"},
-    {NSC_SHORT, 0, 0, fldoff(natstr, nat_btu), "btu"},
-    {NSC_LONG, 0, 0, fldoff(natstr, nat_reserve), "milreserve"},
-    {NSC_LONG, 0, 0, fldoff(natstr, nat_money), "money"},
-    {NSC_TIME, 0, 0, fldoff(natstr, nat_last_login), "login"},
-    {NSC_TIME, 0, 0, fldoff(natstr, nat_last_logout), "logout"},
-    {NSC_TIME, 0, 0, fldoff(natstr, nat_newstim), "newstim"},
-    {NSC_TIME, 0, 0, fldoff(natstr, nat_annotim), "annotim"},
-    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_TLEV]), "tech"},
-    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_RLEV]), "research"},
-    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_ELEV]), "education"},
-    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_HLEV]), "happiness"},
+    {NSC_NATID, 0, 0, fldoff(natstr, nat_cnum), "cnum", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(natstr, nat_stat), "stat", EF_BAD},
+    {NSC_STRINGY, 0, 20, fldoff(natstr, nat_cnam), "cname", EF_BAD},
+    {NSC_STRINGY, NSC_DEITY, 20, fldoff(natstr, nat_pnam), "passwd", EF_BAD},
+    {NSC_STRINGY, 0, 32, fldoff(natstr, nat_hostaddr), "ip", EF_BAD},
+    {NSC_STRINGY, 0, 512, fldoff(natstr, nat_hostname), "hostname", EF_BAD},
+    {NSC_STRINGY, 0, 32, fldoff(natstr, nat_userid), "userid", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(natstr, nat_xstart), "xstart", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(natstr, nat_ystart), "ystart", EF_BAD},
+    {NSC_XCOORD, 0, 0, fldoff(natstr, nat_xcap), "xcap", EF_BAD},
+    {NSC_YCOORD, 0, 0, fldoff(natstr, nat_ycap), "ycap", EF_BAD},
+    {NSC_XCOORD, NSC_DEITY, 0, fldoff(natstr, nat_xorg), "xorg", EF_BAD},
+    {NSC_YCOORD, NSC_DEITY, 0, fldoff(natstr, nat_yorg), "yorg", EF_BAD},
+    {NSC_CHAR, 0, 0, fldoff(natstr, nat_update), "update", EF_BAD},
+    {NSC_UCHAR, 0, 0, fldoff(natstr, nat_missed), "missed", EF_BAD},
+    {NSC_USHORT, 0, 0, fldoff(natstr, nat_tgms), "tgms", EF_BAD},
+    {NSC_USHORT, 0, 0, fldoff(natstr, nat_ann), "ann", EF_BAD},
+    {NSC_USHORT, 0, 0, fldoff(natstr, nat_minused), "minused", EF_BAD},
+    {NSC_SHORT, 0, 0, fldoff(natstr, nat_btu), "btu", EF_BAD},
+    {NSC_LONG, 0, 0, fldoff(natstr, nat_reserve), "milreserve", EF_BAD},
+    {NSC_LONG, 0, 0, fldoff(natstr, nat_money), "money", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(natstr, nat_last_login), "login", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(natstr, nat_last_logout), "logout", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(natstr, nat_newstim), "newstim", EF_BAD},
+    {NSC_TIME, 0, 0, fldoff(natstr, nat_annotim), "annotim", EF_BAD},
+    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_TLEV]), "tech", EF_BAD},
+    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_RLEV]), "research", EF_BAD},
+    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_ELEV]), "education", EF_BAD},
+    {NSC_FLOAT, 0, 0, fldoff(natstr, nat_level[NAT_HLEV]), "happiness", EF_BAD},
     /* FIXME nat_b[], nat_relate[], nat_contact[], nat_rejects[], nat_priorities[] */
-    {NSC_LONG, 0, 0, fldoff(natstr, nat_flags),"flags"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_LONG, 0, 0, fldoff(natstr, nat_flags),"flags", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr intrchr_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct sctintrins, in_name), "name"},
-    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_lcms), "lcms"},
-    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_hcms), "hcms"},
-    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_dcost), "dcost"},
-    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_mcost), "mcost"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct sctintrins, in_name), "name", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_lcms), "lcms", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_hcms), "hcms", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_dcost), "dcost", EF_BAD},
+    {NSC_UCHAR, 0, 0, offsetof(struct sctintrins, in_mcost), "mcost", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr rpt_ca[] = {
-    {NSC_STRING, 0, NUM_RPTS, offsetof(struct rptstr, r_newstory), "newstory"},
-    {NSC_INT, 0, 0, offsetof(struct rptstr, r_good_will), "good_will"},
-    {NSC_INT, 0, 0, offsetof(struct rptstr, r_newspage), "newspage"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, NUM_RPTS, offsetof(struct rptstr, r_newstory), "newstory", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct rptstr, r_good_will), "good_will", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct rptstr, r_newspage), "newspage", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
 };
 
 struct castr empfile_ca[] = {
-    {NSC_STRING, 0, 0, offsetof(struct empfile, name), "name"},
-    {NSC_STRING, 0, 0, offsetof(struct empfile, file), "file_name"},
-    {NSC_INT, 0, 0, offsetof(struct empfile, flags), "flags"},
-    {NSC_NOTYPE, 0, 0, 0, NULL}
+    {NSC_STRING, 0, 0, offsetof(struct empfile, name), "name", EF_BAD},
+    {NSC_STRING, 0, 0, offsetof(struct empfile, file), "file_name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct empfile, flags), "flags", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
+};
+
+struct castr lookup_ca[] = {
+    {NSC_STRING, 0, 0, offsetof(struct lookup, value), "name", EF_BAD},
+    {NSC_INT, 0, 0, offsetof(struct lookup, key), "value", EF_BAD},
+    {NSC_NOTYPE, 0, 0, 0, NULL, EF_BAD}
+};
+
+struct lookup ship_chr_flags[] = {
+    {M_FOOD, "fish"},
+    {M_TORP, "torp"},
+    {M_DCH, "dchrg"},
+    {M_FLY, "plane"},
+    {M_MSL, "miss"},
+    {M_OIL, "oil"},
+    {M_SONAR, "sonar"},
+    {M_MINE, "mine"},
+    {M_SWEEP, "sweep"},
+    {M_SUB, "sub"},
+    {M_SPY, "spy"},
+    {M_LAND, "land"},
+    {M_SUBT, "sub-torp"},
+    {M_TRADE, "trade"},
+    {M_SEMILAND, "semi-land"},
+    {M_OILER, "oiler"},
+    {M_SUPPLY, "supply"},
+    {M_ANTIMISSILE, "anti-missile"},
+    {0, 0}
+};
+
+struct lookup land_chr_flags[] = {
+    {L_XLIGHT, "xlight"},
+    {L_ENGINEER, "engineer"},
+    {L_SUPPLY, "supply"},
+    {L_SECURITY, "security"},
+    {L_LIGHT, "light"},
+    {L_MARINE, "marine"},
+    {L_RECON, "recon"},
+    {L_RADAR, "radar"},
+    {L_ASSAULT, "assault"},
+    {L_FLAK, "flak"},
+    {L_SPY, "spy"},
+    {L_TRAIN, "train"},
+    {L_HEAVY, "heavy"},
+    {0, 0}
+};
+
+struct lookup plane_chr_flags[] = {
+    {P_T, "tactical"},
+    {P_B, "bomber"},
+    {P_F, "intercept"},
+    {P_C, "cargo"},
+    {P_V, "VTOL"},
+    {P_M, "missile"},
+    {P_L, "light"},
+    {P_S, "spy"},
+    {P_I, "image"},
+    {P_O, "satellite"},
+    {P_X, "stealth"},
+    {P_N, "SDI"},
+    {P_H, "half-stealth"},
+    {P_E, "x-light"},
+    {P_K, "helo"},
+    {P_A, "ASW"},
+    {P_P, "para"},
+    {P_ESC, "escort"},
+    {P_MINE, "mine"},
+    {P_SWEEP, "sweep"},
+    {P_MAR, "marine"},
+    {0, 0}
+};
+
+struct lookup nuke_chr_flags[] = {
+    {N_NEUT, "neutron"},
+    {0, 0}
 };
 
index 6a5097a7d8f365ea75d387d266f0d1cf6fe7fb95..19a4588460091f8b25cb567129c7b98db7f2dcc7 100644 (file)
 #include "nat.h"
 #include "prototypes.h"
 
-
-/*
- * This cruft really belongs in the empglb.c file.
- * Yuck.
- */
-
-struct lookup {
-    int key;
-    s_char *value;
-};
-
-struct lookup ship_flags[] = {
-    {M_FOOD, "fish"},
-    {M_TORP, "torp"},
-    {M_DCH, "dchrg"},
-    {M_FLY, "plane"},
-    {M_MSL, "miss"},
-    {M_OIL, "oil"},
-    {M_SONAR, "sonar"},
-    {M_MINE, "mine"},
-    {M_SWEEP, "sweep"},
-    {M_SUB, "sub"},
-    {M_SPY, "spy"},
-    {M_LAND, "land"},
-    {M_SUBT, "sub-torp"},
-    {M_TRADE, "trade"},
-    {M_SEMILAND, "semi-land"},
-    {M_OILER, "oiler"},
-    {M_SUPPLY, "supply"},
-    {M_ANTIMISSILE, "anti-missile"},
-    {0, 0}
-};
-
-struct lookup land_flags[] = {
-    {L_XLIGHT, "xlight"},
-    {L_ENGINEER, "engineer"},
-    {L_SUPPLY, "supply"},
-    {L_SECURITY, "security"},
-    {L_LIGHT, "light"},
-    {L_MARINE, "marine"},
-    {L_RECON, "recon"},
-    {L_RADAR, "radar"},
-    {L_ASSAULT, "assault"},
-    {L_FLAK, "flak"},
-    {L_SPY, "spy"},
-    {L_TRAIN, "train"},
-    {L_HEAVY, "heavy"},
-    {0, 0}
-};
-
-
-struct lookup plane_flags[] = {
-    {P_T, "tactical"},
-    {P_B, "bomber"},
-    {P_F, "intercept"},
-    {P_C, "cargo"},
-    {P_V, "VTOL"},
-    {P_M, "missile"},
-    {P_L, "light"},
-    {P_S, "spy"},
-    {P_I, "image"},
-    {P_O, "satellite"},
-    {P_X, "stealth"},
-    {P_N, "SDI"},
-    {P_H, "half-stealth"},
-    {P_E, "x-light"},
-    {P_K, "helo"},
-    {P_A, "ASW"},
-    {P_P, "para"},
-    {P_ESC, "escort"},
-    {P_MINE, "mine"},
-    {P_SWEEP, "sweep"},
-    {P_MAR, "marine"},
-    {0, 0}
-};
-
-struct lookup nuke_flags[] = {
-    {N_NEUT, "neutron"},
-    {0, 0}
-};
-
 struct look_list {
     union {
        struct lchrstr *lp;
@@ -329,7 +248,7 @@ show_nuke_capab(int tlev)
        for (i = j = 0; i < 32; i++) {
            if (!(np->n_flags & bit(i)))
                continue;
-           if (NULL != (p = lookup(bit(i), nuke_flags))) {
+           if (NULL != (p = lookup(bit(i), nuke_chr_flags))) {
                if (j++ > 0)
                    pr(" ");
                pr(p);
@@ -443,7 +362,7 @@ show_ship_capab(int tlev)
        for (j = n = 0; j < 32; j++) {
            if (!(mp->m_flags & bit(j)))
                continue;
-           if (NULL != (p = lookup(bit(j), ship_flags))) {
+           if (NULL != (p = lookup(bit(j), ship_chr_flags))) {
                if (n++ > 0)
                    pr(" ");
                pr(p);
@@ -494,7 +413,7 @@ show_plane_capab(int tlev)
        for (i = n = 0; i < 32; i++) {
            if (!(pp->pl_flags & bit(i)))
                continue;
-           if (NULL != (p = lookup(bit(i), plane_flags))) {
+           if (NULL != (p = lookup(bit(i), plane_chr_flags))) {
                if (n++ > 0)
                    pr(" ");
                pr(p);
@@ -567,7 +486,7 @@ show_land_capab(int tlev)
        for (j = n = 0; j < 32; j++) {
            if (!(lcp->l_flags & bit(j)))
                continue;
-           if (NULL != (p = lookup(bit(j), land_flags))) {
+           if (NULL != (p = lookup(bit(j), land_chr_flags))) {
                if (n++ > 0)
                    pr(" ");
                pr(p);