]> git.pond.sub.org Git - empserver/commitdiff
(empfile, chr_camap): Merge chr_camap[] into empfile[]. No existing
authorMarkus Armbruster <armbru@pond.sub.org>
Fri, 21 Oct 2005 19:38:37 +0000 (19:38 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 21 Oct 2005 19:38:37 +0000 (19:38 +0000)
user sees the new elements of empfile[].
(EF_SECTOR_CHR, EF_SHIP_CHR, EF_PLANE_CHR, EF_LAND_CHR, EF_NUKE_CHR)
(EF_TREATY_CHR, EF_ITEM, EF_INFRASTRUCTURE, EF_PRODUCT): New.  Not yet
used.
(my_ef_byname): Replacement for ef_byname() that sees the new
elements.
(xdchr): Work with empfile[] instead of chr_camap[].
(xdump): Use my_ef_byname() instead of ef_byname() and
chridx_by_name().
(camap, chr_camap, chridx_by_name): Remove.

include/file.h
src/lib/commands/xdump.c
src/lib/common/file.c
src/lib/global/file.c

index 26562695ccbd21caca017cf3909ab4423a3ccd50..f9e01ada8364ce3c382a7748bbf2c4ffb322a24f 100644 (file)
@@ -66,8 +66,18 @@ struct empfile {
 #define EFF_OWNER      bit(2)  /* has concept of owner */
 #define EFF_GROUP      bit(3)  /* has concept of group */
 
-/* file types, types 0..EF_MAX-1 are empfile[] indexes */
-#define EF_BAD         -1      /* illegal file type */
+/*
+ * Empire `file types'
+ * These are really table IDs.  Some tables are backed by files, some
+ * are compiled into the server.
+ * Historically, only table IDs 0..EF_MAX-1 existed.  All the
+ * functions operating on table IDs still reject the new indexes >=
+ * EF_MAX.  This needs to be rectified, carefully checking existing
+ * code, which could rely on unspoken assumptions about these tables.
+ */
+/* Error value */
+#define EF_BAD         -1
+/* Dynamic game data tables: 0..EF_MAX-1 */
 #define EF_SECTOR      0
 #define EF_SHIP                1
 #define EF_PLANE       2
@@ -84,6 +94,19 @@ struct empfile {
 #define EF_COMM         13
 #define EF_LOST         14
 #define EF_MAX         15
+/* Static game data (configuation): EF_MAX.. */
+#define EF_SECTOR_CHR  15
+#define EF_SHIP_CHR    16
+#define EF_PLANE_CHR   17
+#define EF_LAND_CHR    18
+#define EF_NUKE_CHR    19
+#if 0 /* doesn't exist yet */
+#define EF_NEWS_CHR
+#endif
+#define EF_TREATY_CHR  20
+#define EF_ITEM                21
+#define EF_INFRASTRUCTURE   22
+#define EF_PRODUCT     23
 
 #define EF_NMAP         222    /* Kinda bogus, but used to describe a newdesmap
                                   instead of bmap or map. */
index 23025a353e3959d124a2a1d17fbe1d242242f4ec..9ddb0b625d7be4d99740c5bb05e4d97a8006eca2 100644 (file)
 /* FIXME document dump format */
 /* FIXME don't dump stuff that's useless due to options */
 
-/* Selector descriptors for characteristics tables */
-
-/* Characteristics table meta data */
-struct camap {
-    char *name;                        /* name for lookup */
-    struct castr *ca;          /* selector descriptors */
-    void *chr;                 /* characteristics table */
-    size_t size;               /* size of characteristics table element */
-};
-
-/* Table of characteristics tables */
-static struct camap chr_camap[] = {
-    {"sect chr", dchr_ca, dchr, sizeof(dchr[0])},
-    {"ship chr", mchr_ca, mchr, sizeof(mchr[0])},
-    {"plane chr", plchr_ca, plchr, sizeof(plchr[0])},
-    {"land chr", lchr_ca, lchr, sizeof(lchr[0])},
-    {"nuke chr", nchr_ca, nchr, sizeof(nchr[0])},
-#if 0
-    /* FIXME rpt[] lacks sentinel, xdchr() doesn't terminate */
-    {"news chr", rpt_ca, rpt, sizeof(rpt[0])},
-#endif
-    {"treaty chr", tchr_ca, tchr, sizeof(tchr[0])},
-    {"item", ichr_ca, ichr, sizeof(ichr[0])},
-    {"infrastructure", intrchr_ca, intrchr, sizeof(intrchr[0])},
-    {"product", pchr_ca, pchr, sizeof(pchr[0])},
-    {NULL, NULL, NULL, 0}
-};
-
 /*
- * Search chr_camap[] for element named NAME, return its index.
+ * Search empfile[] for element named NAME, return its index.
  * Return M_NOTFOUND if there are no matches, M_NOTUNIQUE if there are
  * several.
+ * FIXME Merge into ef_byname().  ef_byname() stops at EF_MAX!
  */
 static int
-chridx_by_name(char *name)
+my_ef_byname(char *name)
 {
-    return stmtch(name, chr_camap, offsetof(struct camap, name),
-                 sizeof(chr_camap[0]));
+    return stmtch(name, empfile, offsetof(struct empfile, name),
+                 sizeof(empfile[0]));
 }
 
 /*
@@ -157,6 +130,7 @@ xdprval(struct valstr *val, char *sep)
        if (s) {
            pr("%s\"", sep);
            l = s + val->val_as.str.maxsz;
+           /* FIXME maxsz == INT_MAX ! */
            for (;;) {
                for (e=s; e<l && *e != '"' && *e != '\\' && isgraph(*e); ++e) ;
                pr("%.*s", (int)(e-s), s);
@@ -284,32 +258,30 @@ xditem(int type, char *arg)
 /*
  * Dump characteristics described by chr_camap[IDX].
  * Return RET_OK on success, RET_SYN if IDX < 0.
+ * FIXME Merge into xditem() when nxtitem() is ready for it.
  */
 static int
 xdchr(int chridx)
 {
-    struct camap *cm;
+    struct empfile *ef = &empfile[chridx];
+    struct castr *ca = ef->cadef;
     char *p;
     struct valstr val;
     int n;
 
-    if (chridx < 0)
-       return RET_SYN;
-    cm = &chr_camap[chridx];
-
-    xdhdr(cm->name, cm->ca);
+    xdhdr(ef->name, ca);
 
     n = 0;
-    for (p = cm->chr; ; p += cm->size) {
-       val.val_type = cm->ca[0].ca_type;
+    for (p = ef->cache; ; p += ef->size) {
+       val.val_type = ca[0].ca_type;
        val.val_cat = NSC_OFF;
-       val.val_as.sym.off = cm->ca[0].ca_off;
+       val.val_as.sym.off = ca[0].ca_off;
        val.val_as.sym.idx = 0;
        nstr_exec_val(&val, player->cnum, p, NSC_STRING);
        if (!val.val_as.str.base || !*val.val_as.str.base)
            break;
        ++n;
-       xdflds(cm->ca, p);
+       xdflds(ca, p);
        pr("\n");
     }
 
@@ -391,11 +363,11 @@ xdump(void)
     if (!p)
        return RET_SYN;
 
-    type = ef_byname(p);
-    if (type >= 0) {
+    type = my_ef_byname(p);
+    if (type >= EF_MAX)
+       return xdchr(type);
+    else if (type >= 0) {
        return xditem(type, player->argp[2]);
-    } else if (!strncmp(p, "chr", strlen(p)) && player->argp[2]) {
-       return xdchr(chridx_by_name(player->argp[2]));
     } else if (!strncmp(p, "opt", strlen(p))) {
        return xdopt();
     } else if (!strncmp(p, "ver", strlen(p))) {
index 271e00aeb4706ceb8030d292879d1e3ae06c7f02..13805a4f81d4408b63850ebebcea941cb938b09c 100644 (file)
@@ -362,8 +362,8 @@ ef_mtime(int type)
 }
 
 /*
- * Return the filedescriptor used for the file containing objects of type
- * 'type'.
+ * Search empfile[0..EF_MAX-1] for element named NAME.
+ * Return its index in empfile[] if found, else -1.
  */
 int
 ef_byname(char *name)
index 36a045bdd6e2f96ee29992f747f5221dca0a14a6..e64748cfdf447dabf5d2c42c171c602a485b681f 100644 (file)
 #include "news.h"
 #include "nat.h"
 #include "lost.h"
+#include "product.h"
 
 #include "gamesdef.h"
 #include "commodity.h"
 
 struct empfile empfile[] = {
+    /* Dynamic game data */
     {"sect", "sector", EFF_XY | EFF_OWNER,
      0, sizeof(struct sctstr), NULL, NULL, NULL,
      -1, -1, 0, 0, NULL, 0, NULL},
@@ -97,5 +99,45 @@ struct empfile empfile[] = {
      -1, -1, 0, 0, NULL, 0, NULL},
     {"lost", "lostitems", EFF_OWNER,
      0, sizeof(struct loststr), NULL, NULL, NULL,
-     -1, -1, 0, 0, NULL, 0, NULL}
+     -1, -1, 0, 0, NULL, 0, NULL},
+
+    /* Static game data (configuation) */
+    {"sect chr", NULL, EFF_MEM,
+     0, sizeof(dchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)dchr, 0, dchr_ca},
+    {"ship chr", NULL, EFF_MEM,
+     0, sizeof(mchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)mchr, 0, mchr_ca},
+    {"plane chr", NULL, EFF_MEM,
+     0, sizeof(plchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)plchr, 0, plchr_ca},
+    {"land chr", NULL, EFF_MEM,
+     0, sizeof(lchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)lchr, 0, lchr_ca},
+    {"nuke chr", NULL, EFF_MEM,
+     0, sizeof(nchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)nchr, 0, nchr_ca},
+#if 0
+    /* FIXME rpt[] lacks sentinel, xdchr() doesn't terminate */
+    {"news chr", NULL, EFF_MEM,
+     0, sizeof(rpt[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)rpt, 0, rpt_ca},
+#endif
+    {"treaty chr", NULL, EFF_MEM,
+     0, sizeof(tchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)tchr, 0, tchr_ca},
+    {"item", NULL, EFF_MEM,
+     0, sizeof(ichr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)ichr, 0, ichr_ca},
+    {"infrastructure", NULL, EFF_MEM,
+     0, sizeof(intrchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)intrchr, 0, intrchr_ca},
+    {"product", NULL, EFF_MEM,
+     0, sizeof(pchr[0]), NULL, NULL, NULL,
+     -1, -1, 0, 0, (char *)pchr, 0, pchr_ca},
+
+    /* Sentinel */
+    {NULL, NULL, 0,
+     0, 0, NULL, NULL, NULL,
+     -1, -1, 0,0,NULL, 0, NULL}
 };