]> git.pond.sub.org Git - empserver/commitdiff
Change nation status from bits to a simple enum:
authorMarkus Armbruster <armbru@pond.sub.org>
Wed, 4 Jan 2006 22:49:42 +0000 (22:49 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Wed, 4 Jan 2006 22:49:42 +0000 (22:49 +0000)
(nat_status, STAT_UNUSED, STAT_VIS, STAT_ACTIVE): New.
(STAT_NEW, STAT_SANCT, STAT_GOD): Change into nat_status members.
(STAT_INUSE, STAT_NORM): Remove.
(natstr): Use new nat_status for nat_stat.
    New value       Old value
    STAT_UNUSED     0
    STAT_NEW        STAT_INUSE | STAT_NEW
    STAT_VIS        STAT_INUSE
    STAT_SANCT      STAT_INUSE | STAT_SANCT
    STAT_ACTIVE     STAT_INUSE | STAT_NORM
    STAT_GOD        STAT_INUSE | STAT_NORM | STAT_GOD
Users changed.

35 files changed:
include/nat.h
src/lib/commands/acce.c
src/lib/commands/add.c
src/lib/commands/brea.c
src/lib/commands/cede.c
src/lib/commands/chan.c
src/lib/commands/coun.c
src/lib/commands/decl.c
src/lib/commands/edit.c
src/lib/commands/flash.c
src/lib/commands/nati.c
src/lib/commands/new.c
src/lib/commands/play.c
src/lib/commands/powe.c
src/lib/commands/reje.c
src/lib/commands/rela.c
src/lib/commands/repo.c
src/lib/commands/tele.c
src/lib/commands/xdump.c
src/lib/common/nat.c
src/lib/common/wantupd.c
src/lib/global/nsc.c
src/lib/player/init_nats.c
src/lib/player/login.c
src/lib/player/nat.c
src/lib/player/player.c
src/lib/subs/natarg.c
src/lib/subs/wu.c
src/lib/update/age.c
src/lib/update/main.c
src/lib/update/nat.c
src/lib/update/prepare.c
src/lib/update/removewants.c
src/lib/update/revolt.c
src/util/files.c

index f9ff20b14f1c2e1d7d95b753d865d7206370a34a..7b3d121e5071d4bf7d5f4f282dc53726462d2697 100644 (file)
 
 #define        MAXNOR          50      /* max # realms */
 
+/* Nation status */
+typedef enum {
+    /*
+     * Don't change order without checking inequality comparisons and
+     * array initializers!
+     */
+    STAT_UNUSED,               /* not in use */
+    STAT_NEW,                  /* just initialized */
+    STAT_VIS,                  /* visitor */
+    STAT_SANCT,                        /* still in sanctuary */
+    STAT_ACTIVE,               /* active (sanctuary broken) */
+    STAT_GOD                   /* deity powers */
+} nat_status;
+
 enum {                         /* Priorities */
     /* sector types are also priorities */
     PRI_SMAINT = SCT_MAXDEF+1, /* ship maintenance */
@@ -61,7 +75,7 @@ struct natstr {
     short ef_type;
     natid nat_cnum;            /* our country number */
     /* end of part matching struct genitem */
-    s_char nat_stat;           /* inuse, norm, god, abs */
+    nat_status nat_stat;
     char nat_cnam[20];         /* country name */
     char nat_pnam[20];         /* representative */
     char nat_hostaddr[32];     /* host addr of last user */
@@ -92,21 +106,14 @@ struct natstr {
     char nat_spare[15];
 };
 
-       /* nation status types */
-#define STAT_INUSE     bit(0)  /* cnum in use */
-#define STAT_SANCT     bit(1)  /* country in sanctuary */
-#define STAT_NORM      bit(2)  /* normal country */
-#define STAT_GOD       bit(3)  /* deity powers */
-#define STAT_NEW       bit(5)  /* just initialized */
-
        /* Update fields. */
 #define        WUPD_WANT       bit(0)
 
        /* nstat values */
-#define VIS            STAT_INUSE
-#define        NORM            (STAT_INUSE|STAT_NORM)
-#define        GOD             (STAT_INUSE|STAT_GOD)
-#define        SANCT           (STAT_INUSE|STAT_SANCT)
+#define VIS            bit(0)
+#define SANCT          (bit(1) | VIS)
+#define NORM           (bit(2) | VIS)
+#define GOD            (bit(3) | NORM | VIS)
 #define        CAP             bit(6)
 #define        MONEY           bit(7)
 
index f703f6ae1d8caaa82a98f740f715345b947d6c12..690f238d4430dc01bec5d1443cc45723d675c404 100644 (file)
@@ -78,8 +78,7 @@ acce(void)
            break;
        if (cn == as)
            continue;
-       if ((np->nat_stat & STAT_NORM) == 0 &&
-           (np->nat_stat & STAT_SANCT) == 0)
+       if (np->nat_stat < STAT_SANCT)
            continue;
        if (opt_HIDDEN) {
            if (!player->god && !getcontact(getnatp(player->cnum), cn))
index 15607343d495a128ed0031136d507412a1f50b7a..4510326682a51694a5c484c28c288252b1ceb800 100644 (file)
@@ -68,7 +68,7 @@ add(void)
     struct lndstr land;
 
     for (freecn = 0; NULL != (natp = getnatp(freecn)); freecn++) {
-       if ((natp->nat_stat & STAT_INUSE) == 0)
+       if (natp->nat_stat == STAT_UNUSED)
            break;
     }
     if (freecn < MAXNOC)
@@ -111,19 +111,19 @@ add(void)
        return RET_SYN;
     switch (*p) {
     case 'v':
-       stat = STAT_INUSE;
+       stat = STAT_VIS;
        break;
     case 'n':
-       stat = STAT_NEW | STAT_INUSE;
+       stat = STAT_NEW;
        break;
     case 'a':
-       stat = STAT_NORM | STAT_INUSE;
+       stat = STAT_ACTIVE;
        break;
     case 'g':
-       stat = STAT_GOD | STAT_NORM | STAT_INUSE;
+       stat = STAT_GOD;
        break;
     case 'd':
-       stat = 0;
+       stat = STAT_UNUSED;
        break;
     default:
        pr("Illegal status\n");
@@ -189,8 +189,7 @@ add(void)
        }
     }
 
-    if ((natp->nat_stat & (STAT_INUSE | STAT_NORM | STAT_GOD)) ==
-       STAT_INUSE) {
+    if (natp->nat_stat == STAT_NEW || natp->nat_stat == STAT_VIS) {
        *natp->nat_hostaddr = '\0';
        *natp->nat_hostname = '\0';
        *natp->nat_userid = '\0';
index a9c8589c5676e37e2d9c63962381432607b94cd4..99fd25fa3afcb51292af37d153e2c501d5dca88e 100644 (file)
@@ -45,13 +45,12 @@ brea(void)
     struct natstr *natp;
 
     natp = getnatp(player->cnum);
-    if ((natp->nat_stat & STAT_SANCT) == 0) {
+    if (natp->nat_stat != STAT_SANCT) {
        pr("You aren't in sanctuary!\n");
        return RET_SYN;
     }
     bsanct();
-    natp->nat_stat &= ~STAT_SANCT;
-    natp->nat_stat |= STAT_NORM;
+    natp->nat_stat = STAT_ACTIVE;
     putnat(natp);
     player->nstat |= NORM;
     return RET_OK;
index 6419025c6cd9e828ad2d816eee50b40eedc6d589..6518d678a4b1044948c73bf82a65672f46e33cc1 100644 (file)
@@ -99,7 +99,7 @@ cede(void)
        return RET_FAIL;
     }
     natp = getnatp(n);
-    if (natp->nat_stat & STAT_GOD) {
+    if (natp->nat_stat == STAT_GOD) {
        pr("You can only give to normal countries...\n");
        return RET_FAIL;
     }
index 3d6d108c5338c72136a5aa21a36f4ea059b3c83b..e47b37effcac90fb36ce247f86d711b758cfe57f 100644 (file)
@@ -61,7 +61,7 @@ chan(void)
                  buf)) == 0)
        return RET_SYN;
     us = getnatp(player->cnum);
-    if (us->nat_stat == VIS) {
+    if (us->nat_stat == STAT_VIS) {
        pr("Visitor countries can't change their country name or representative.\n");
        return RET_FAIL;
     }
@@ -70,7 +70,7 @@ chan(void)
     case 'c':
        charge = 0;
        btucost = 0;
-       if (!player->god && (us->nat_stat & STAT_NORM)) {
+       if (us->nat_stat == STAT_ACTIVE) {
            if (opt_BLITZ == 0) {
                if (us->nat_btu < 254) {
                    pr("You need 254 btus to change your country name!\n");
index 5b469266883ef594551476afdd05178535537e6e..8036f41f3b3328c225f385d48eb796a67be59d24 100644 (file)
@@ -59,7 +59,7 @@ coun(void)
     pr("  #   last access                         %sstatus     country name\n",
        player->god ? "BTU  " : "");
     while (nxtitem(&ni, &nat)) {
-       if ((nat.nat_stat & STAT_INUSE) == 0)
+       if (nat.nat_stat == STAT_UNUSED)
            continue;
        coun_list(&nat);
     }
@@ -76,7 +76,7 @@ coun_list(struct natstr *natp)
 
     if (getplayer(cn)
        && (player->god
-           || (natp->nat_stat & STAT_GOD)
+           || natp->nat_stat == STAT_GOD
            || cn == player->cnum || getrel(natp, player->cnum) == ALLIED))
         pr(" Now logged on                     ");
     else if (player->god) {
@@ -94,13 +94,13 @@ coun_list(struct natstr *natp)
     if (player->god)
        pr(" %4d", natp->nat_btu);
 
-    if (natp->nat_stat & STAT_GOD)
+    if (natp->nat_stat == STAT_GOD)
        status = "DEITY";
-    else if (natp->nat_stat & STAT_NEW)
+    else if (natp->nat_stat == STAT_NEW)
        status = "New";
-    else if (natp->nat_stat & STAT_SANCT)
+    else if (natp->nat_stat == STAT_SANCT)
        status = "Sanctuary";
-    else if (natp->nat_stat & STAT_NORM) {
+    else if (natp->nat_stat == STAT_ACTIVE) {
        status = "Active";
        if (!opt_HIDDEN || player->god) {
            if (influx(natp))
index c9116acb380eb640b8c8cc45547d479280213424..29ffd7bc0c5cb92804a60ee74b099b24c0f89ffd 100644 (file)
@@ -102,7 +102,7 @@ decl(void)
 
     natp = getnatp(who);
     while (nxtitem(&ni, &nat)) {
-       if (!(nat.nat_stat & STAT_INUSE))
+       if (nat.nat_stat == STAT_UNUSED)
            continue;
        if (player->cnum == (natid)ni.cur)
            continue;
index 15e8c3d9f7413fa7722f28153c2464445e8d9050..7beb85ddbccbfc47da76027f4aca42b44ed27b91 100644 (file)
@@ -748,7 +748,7 @@ docountry(s_char op, int arg, s_char *p, float farg, natid nat,
        np->nat_yorg = newy;
        break;
     case 's':
-       np->nat_stat = (s_char)errcheck(arg, 0, STAT_NEW);
+       np->nat_stat = (nat_status)errcheck(arg, STAT_UNUSED, STAT_GOD);
        break;
     case 'u':
        arg = errcheck(arg, 0, m_m_p_d);
index 82eed93365c2e1a1832011fba4c4e21c836d58b7..e6caf202447afaff9b223045ce1a7f59d8d87d71 100644 (file)
@@ -58,18 +58,17 @@ flash(void)
        return RET_SYN;
     }
 
-    if (us->nat_stat & STAT_GOD) {
+    if (us->nat_stat == STAT_GOD) {
        /* We are gods, we can flash anyone */
-    } else if (us->nat_stat == VIS) {
+    } else if (us->nat_stat == STAT_VIS) {
        /* We are a visitor.  We can only flash the gods. :) */
-       if (!(to->nat_stat & STAT_GOD)) {
+       if (to->nat_stat != STAT_GOD) {
            pr("Visitors can only flash the gods.\n");
            return RET_SYN;
        }
     } else {
        /* Ok, we are a normal country, can we flash them? */
-       if ((!(to->nat_stat & STAT_GOD)) &&
-           (getrel(to, player->cnum) < FRIENDLY)) {
+       if (to->nat_stat != STAT_GOD && getrel(to, player->cnum) < FRIENDLY) {
            pr("%s is not a deity or friendly with us.\n", to->nat_cnam);
            return RET_SYN;
        }
index d8dce7f9c1da563db876bf7e32d54bbdca5c713f..d8e87dcdcad4cff01ad9448e4f2890dc271e6199 100644 (file)
@@ -74,7 +74,7 @@ nati(void)
     prdate();
     pr("Nation status is %s", natstate(natp));
     pr("     Bureaucratic Time Units: %d\n", natp->nat_btu);
-    if (natp->nat_stat & STAT_INUSE) {
+    if (natp->nat_stat != STAT_UNUSED) {
        getsect(natp->nat_xcap, natp->nat_ycap, &sect);
        if (influx(natp))
            pr("No capital (was at %s).\n",
index 44c173fb7f504eb448af259e55b78de7eb61354d..f7005836fd725e1286e3bfe9bfb80617d43fa508 100644 (file)
@@ -80,7 +80,7 @@ new(void)
     }
     num = n;
     natp = getnatp(num);
-    if ((natp->nat_stat & STAT_NEW) == 0) {
+    if (natp->nat_stat != STAT_NEW) {
        pr("Country #%d (%s) isn't a new country!\n", num, cname(num));
        return RET_SYN;
     }
@@ -180,8 +180,7 @@ new(void)
     sect.sct_item[I_UW] = 75;
     putsect(&sect);
     natp->nat_btu = max_btus;
-    natp->nat_stat &= ~STAT_NEW;
-    natp->nat_stat |= STAT_SANCT;
+    natp->nat_stat = STAT_SANCT;
     natp->nat_xcap = x;
     natp->nat_ycap = y;
     natp->nat_xorg = x;
index 3ae1f603bc95d118bf0b0c297803c90c68cfcca7..abfb22659ab8f428e50c890e1fbab6d26caba3c9 100644 (file)
@@ -87,12 +87,12 @@ play_list(struct player *joe)
        /* It's a blitz, we see everything */
     } else if (joe->god) {
        /* This country is a god, so we see it */
-    } else if (us->nat_stat == VIS) {
+    } else if (us->nat_stat == STAT_VIS) {
        /* We are a visitor country, we can't see squat, except deities */
        return 0;
     } else if (joe->cnum != player->cnum) {
        /* This isn't us.  Can we see it? */
-       if (natp->nat_stat == VIS) {
+       if (natp->nat_stat == STAT_VIS) {
            /* Yes, we can see visitors are logged on */
        } else if (getrel(natp, player->cnum) < ALLIED) {
            /* This is a non-allied country, don't show it. */
index f8f83f459252ecf18e6b49cfe66cee2ea03411fb..5123066d2b2523e55ae7a8e96d7242f8363e70f5 100644 (file)
@@ -144,7 +144,7 @@ powe(void)
                continue;
        }
        natp2 = getnatp(pow.p_nation);
-       if (natp2->nat_stat & STAT_GOD)
+       if (natp2->nat_stat == STAT_GOD)
            continue;
        if (use_targets && !targets[pow.p_nation])
            continue;
@@ -288,12 +288,7 @@ gen_power(void)
     for (i = 1; NULL != (natp = getnatp(i)); i++) {
        pow = &powbuf[i];
        pow->p_nation = i;
-       if ((natp->nat_stat & STAT_INUSE) == 0 ||
-           (natp->nat_stat & STAT_NORM) == 0) {
-           pow->p_power = 0.;
-           continue;
-       }
-       if (natp->nat_stat & STAT_GOD) {
+       if (natp->nat_stat != STAT_ACTIVE) {
            pow->p_power = 0.;
            continue;
        }
@@ -397,11 +392,11 @@ set_target(s_char *p, int *targets)
        target = cnumb(p);
 
     if (target > 0 && target < MAXNOC && (natp = getnatp(target))) {
-       if (natp->nat_stat & STAT_GOD) {
+       if (natp->nat_stat == STAT_GOD) {
            pr("Country #%d is a deity country\n", target);
-       } else if (!(natp->nat_stat & STAT_INUSE)) {
+       } else if (natp->nat_stat == STAT_UNUSED) {
            pr("Country #%d is not in use\n", target);
-       } else if (!(natp->nat_stat & STAT_NORM)) {
+       } else if (natp->nat_stat != STAT_ACTIVE) {
            pr("Country #%d is not a normal country\n", target);
        } else {
            targets[target] = 1;
index 1adfdf6e3876fca986d4a7baccd95282b21ca684..0f2144d03b090e73b90e90084e4611347d5720e8 100644 (file)
@@ -89,13 +89,7 @@ reje(void)
     if (!snxtitem(&ni, EF_NATION, player->argp[3]))
        return RET_SYN;
     while (nxtitem(&ni, &nat)) {
-#if 0
-       if ((nat.nat_stat & STAT_NORM) == 0) {
-           pr("You may not reject/accept stuff from %s\nbecause they are not a normal country.\n", nat.nat_cnam);
-           continue;
-       }
-#endif
-       if (nat.nat_stat & STAT_GOD) {
+       if (nat.nat_stat == STAT_GOD) {
            pr("You may not reject/accept stuff from %s\nbecause they are a deity.\n", nat.nat_cnam);
            continue;
        }
index 44f7a13027d1a57bb4208c78839f40acc47e1e8e..82c6ec0bc8928674c7a8278ccd273d94c36b7c63 100644 (file)
@@ -82,8 +82,7 @@ rela(void)
            break;
        if (cn == as)
            continue;
-       if ((np->nat_stat & STAT_NORM) == 0 &&
-           (np->nat_stat & STAT_SANCT) == 0)
+       if (np->nat_stat < STAT_SANCT)
            continue;
        if (opt_HIDDEN) {
            if (!player->god && !getcontact(natp, cn))
index 9cdc6ff92ffc3d0d15dd0edab132f4e5079b8f95..eee2cef75285f4e0d636f0c6460bb68933abe256 100644 (file)
@@ -78,7 +78,7 @@ repo(void)
     natp = getnatp(player->cnum);
     memset(&mystat, 0, sizeof(struct stats));
     mystat.stat = natp->nat_stat;
-    if (mystat.stat & STAT_NORM) {
+    if (mystat.stat >= STAT_ACTIVE) {
        mystat.res = natp->nat_level[NAT_RLEV];
        mystat.tech = natp->nat_level[NAT_TLEV];
        mystat.edu = natp->nat_level[NAT_ELEV];
@@ -91,7 +91,7 @@ repo(void)
        first = 1;
     }
     while (nxtitem(&ni, &nat)) {
-       if (!(nat.nat_stat & STAT_INUSE))
+       if (nat.nat_stat == STAT_UNUSED)
            continue;
        if (opt_HIDDEN) {
            if (!player->god && !getcontact(getnatp(player->cnum), ni.cur))
@@ -132,8 +132,7 @@ repo_list(struct stats *stat, natid cn, struct natstr *natp)
        prxy("  %4d,%-4d\n", natp->nat_xcap, natp->nat_ycap, player->cnum);
        return;
     }
-    switch (natp->nat_stat & (STAT_NORM | STAT_GOD | STAT_NEW | STAT_SANCT)) {
-    case STAT_NORM:
+    if (natp->nat_stat == STAT_ACTIVE) {
        pr(" %-3d   %-14.14s ", cn, natp->nat_cnam);
        printdiff(stat->stat, stat->tech, natp, NAT_TLEV);
        printdiff(stat->stat, stat->res, natp, NAT_RLEV);
@@ -149,19 +148,6 @@ repo_list(struct stats *stat, natid cn, struct natstr *natp)
            else
                pr("Active\n");
        }
-       break;
-    case STAT_SANCT:
-       break;
-    case STAT_NEW:
-    case 0:
-       break;
-    case STAT_SANCT | STAT_NORM | STAT_GOD:
-    case STAT_NORM | STAT_GOD:
-    case STAT_GOD:
-       break;
-    default:
-       pr("????        ????        ????        ????\n");
-       break;
     }
 }
 
@@ -177,7 +163,7 @@ printdiff(int mystat, double ours, struct natstr *natp, int what)
        pr(" %7.2f    ", ours);
        return;
     }
-    if (ours && mystat & STAT_NORM && natp->nat_stat & STAT_NORM) {
+    if (ours && mystat >= STAT_ACTIVE && natp->nat_stat >= STAT_ACTIVE) {
        theirs = natp->nat_level[what];
        if ((shift = min((int)theirs, (int)ours) - 100) > 0) {
            ours -= shift;
index 93d21c06e229d4de3b8ad7d5f1834476fa520f55..f09ad2edf83b8564efc106f5b6af9776e01a1b8d 100644 (file)
@@ -103,8 +103,7 @@ tele(void)
            }
 
            natp = getnatp(to);
-           if (((natp->nat_stat & STAT_NORM) == 0) &&
-               ((natp->nat_stat & STAT_SANCT) == 0)) {
+           if (natp->nat_stat < STAT_SANCT) {
                pr("%s has no \"telegram priveleges\".\n", cname(to));
                kk++;
                continue;
@@ -119,8 +118,8 @@ tele(void)
                return RET_FAIL;
            }
 
-           if (!player->god &&
-               (natp->nat_stat & GOD) != GOD && player->cnum != to)
+           if (!player->god && natp->nat_stat != STAT_GOD
+               && player->cnum != to)
                nreport(player->cnum, N_SENT_TEL, to, 1);
            if (opt_HIDDEN) {
                setcont(to, player->cnum, FOUND_TELE);
index b08d364db75f757765655a411875e9937193c5c0..45f148835d154fb304640f7559ba648f0d9dc456 100644 (file)
@@ -204,7 +204,7 @@ xdvisible(int type, void *p)
     case EF_LOST:
        return gp->own != 0 && (gp->own == player->cnum || player->god);
     case EF_NATION:
-       return ((struct natstr *)p)->nat_stat != 0
+       return ((struct natstr *)p)->nat_stat != STAT_UNUSED
            && (gp->own == player->cnum || player->god);
     case EF_NEWS:
        return ((struct nwsstr *)p)->nws_vrb != 0
index a39bf191a5e4a55f5a6bdeaa91a2fca148ee1924..a934a20170ed1d1573ef0618dc2c99e337acca44 100644 (file)
@@ -90,15 +90,11 @@ rejectname(struct natstr *np, natid other)
 char *
 natstate(struct natstr *np)
 {
-    if ((np->nat_stat & STAT_INUSE) == 0)
-       return "FREE";
-    if (np->nat_stat & STAT_GOD)
-       return "DEITY";
-    if (np->nat_stat & STAT_SANCT)
-       return "SANCTUARY";
-    if ((np->nat_stat & STAT_NORM) == 0)
-       return "VISITOR";
-    return "ACTIVE";
+    static char *stnam[] = {
+       /* must match nat_status */
+       "FREE", "VISITOR", "VISITOR", "SANCTUARY", "ACTIVE", "DEITY"
+    };
+    return stnam[np->nat_stat];
 }
 
 /* This returns the relations that np has with them */
index 7c2b00dcfbc263b9dfbee34718079ad495e1df3a..9a1a46462900a1e9b25b16d2581e07e21ab3e405 100644 (file)
@@ -129,8 +129,7 @@ demand_update_want(int *want, int *pop, int which)
     for (cn = 1; 0 != (natp = getnatp(cn)); cn++) {
        /* Only countries which are normal. */
        /* Should probably include sanctuaries ..... */
-       if (((natp->nat_stat & NORM) == NORM) &&
-           ((natp->nat_stat & GOD) != GOD)) {
+       if (natp->nat_stat == STAT_ACTIVE) {
            totpop++;
            if ((natp->nat_update & WUPD_WANT) == WUPD_WANT) {
                totwant++;
@@ -175,8 +174,7 @@ demand_check(void)
 
     veto = 0;
     for (cn = 1; 0 != (natp = getnatp(cn)); cn++) {
-       if (((natp->nat_stat & NORM) == NORM) &&
-           ((natp->nat_stat & GOD) != GOD)) {
+       if (natp->nat_stat == STAT_ACTIVE) {
            if (natp->nat_missed >= update_missed)
                veto = cn;
        }
index aefe30da399d514c4356a8a0dd1e1e56b8d7430c..398c8dc42d63f420ebe0ab6cc7bfe01a2aeb0c27 100644 (file)
@@ -485,7 +485,8 @@ struct castr trade_ca[] = {
 
 struct castr nat_ca[] = {
     {NSC_NATID, 0, 0, fldoff(natstr, nat_cnum), "cnum", EF_NATION},
-    {NSC_CHAR, NSC_BITS, 0, fldoff(natstr, nat_stat), "stat", EF_BAD /* FIXME */},
+    {NSC_CHAR, NSC_SITYPE(nat_status), 0, fldoff(natstr, nat_stat), "stat",
+     EF_BAD /* FIXME */},
     {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},
index 827bc991654a6eed5664996458e35b26d8d4f77a..67efd6d36e025617fba2b280e31c98162e8492a2 100644 (file)
@@ -49,12 +49,16 @@ static int nat_cap(int);
 int
 init_nats(void)
 {
+    static int nstat[] = {
+       /* must match nat_status */
+       0, VIS, VIS, SANCT, NORM, GOD
+    };
     struct natstr *np;
 
     if ((np = getnatp(player->cnum)) == 0)
        return -1;
-    player->nstat = np->nat_stat;
-    player->god = np->nat_stat & STAT_GOD;
+    player->nstat = nstat[np->nat_stat];
+    player->god = np->nat_stat == STAT_GOD;
     player->map = ef_ptr(EF_MAP, player->cnum);
     player->bmap = ef_ptr(EF_BMAP, player->cnum);
     if (opt_HIDDEN) {
@@ -86,7 +90,7 @@ nat_cap(int btu)
                 np->nat_cnam, np->nat_xcap, np->nat_ycap);
        return -1;
     }
-    if ((player->nstat & NORM) == NORM) {
+    if (np->nat_stat >= STAT_ACTIVE) {
        if (influx(np))
            player->nstat &= ~CAP;
        else
@@ -110,7 +114,7 @@ nat_cap(int btu)
        else
            np->nat_btu += delta;
     }
-    if (np->nat_stat == VIS)
+    if (np->nat_stat == STAT_VIS)
        np->nat_btu = max_btus;
     putnat(np);
     return 0;
index 356d7fb65c0dd98ac4615bc51b5efd8e9c7ef9be..32eaa175f8ea12717087ba52b8f98d6718db0056 100644 (file)
@@ -152,7 +152,7 @@ sanc_cmd(void)
 
     snxtitem_all(&ni, EF_NATION);
     while (nxtitem(&ni, &nat)) {
-       if (nat.nat_stat != (STAT_INUSE | STAT_SANCT))
+       if (nat.nat_stat != STAT_SANCT)
            continue;
        if (first) {
            pr_id(player, C_DATA,
@@ -293,7 +293,7 @@ play_cmd(void)
     other = getplayer((natid)player->cnum);
     if (other) {
        natp = getnatp(player->cnum);
-       if (natp->nat_stat != VIS) {
+       if (natp->nat_stat != STAT_VIS) {
            pr_id(player, C_EXIT, "country in use by %s\n", praddr(other));
        } else {
            pr_id(player, C_EXIT, "country in use\n");
@@ -331,7 +331,7 @@ kill_cmd(void)
        return RET_FAIL;
     }
     np = getnatp(player->cnum);
-    if (np->nat_stat & STAT_GOD && !match_user(authfil, player)) {
+    if (np->nat_stat == STAT_GOD && !match_user(authfil, player)) {
        logerror("NON-AUTHed Login attempted by %s", praddr(player));
        pr_id(player, C_EXIT, "You're not a deity!\n");
        return RET_FAIL;
index 1281c37e838bb6d3c1898c71e39561b877fc5a7f..acbd26bca260a8aaa403c3da96ddb641fd3d4abf 100644 (file)
@@ -47,8 +47,7 @@ natbyname(s_char *name, natid *result)
     int i;
 
     for (i = 0; NULL != (np = getnatp(i)); i++) {
-       if ((np->nat_stat & STAT_INUSE) &&
-           (strcmp(np->nat_cnam, name) == 0)) {
+       if (np->nat_stat != STAT_UNUSED && !strcmp(np->nat_cnam, name)) {
            *result = i;
            return 0;
        }
@@ -63,7 +62,7 @@ natpass(int cn, s_char *pass)
     struct natstr *np;
 
     np = getnatp((natid)cn);
-    if (np->nat_stat == VIS)
+    if (np->nat_stat == STAT_VIS)
        return 1;
     if (strcmp(np->nat_pnam, pass) == 0)
        return 1;
index 0a061276fa8d5ba5bcf3510888498901619bf4a9..69a24c703f8d33db5100cf6e50e19e0dc61508a5 100644 (file)
@@ -86,7 +86,7 @@ player_main(struct player *p)
     }
     if (!gamehours(player->curup)) {
        pr("Empire hours restriction in force\n");
-       if ((natp->nat_stat & STAT_GOD) == 0)
+       if (natp->nat_stat != STAT_GOD)
            return;
     }
     daychange(player->curup);
@@ -94,7 +94,7 @@ player_main(struct player *p)
        pr("Time exceeded today\n");
        return;
     }
-    if (natp->nat_stat != VIS
+    if (natp->nat_stat != STAT_VIS
        && natp->nat_last_login
        && (strcmp(natp->nat_hostaddr, player->hostaddr)
            || strcmp(natp->nat_userid, player->userid))) {
@@ -186,7 +186,7 @@ status(void)
        putnat(natp);
        return 0;
     }
-    player->visitor = (natp->nat_stat & (STAT_NORM | STAT_GOD)) == 0;
+    player->visitor = natp->nat_stat < STAT_SANCT;
     if (player->dolcost != 0.0) {
        if (player->dolcost > 100.0)
            pr("That just cost you $%.2f\n", player->dolcost);
@@ -233,7 +233,7 @@ status(void)
            daychange(player->curup);
            if (!gamehours(player->curup)) {
                pr("Empire hours restriction in force\n");
-               if ((natp->nat_stat & STAT_GOD) == 0) {
+               if (natp->nat_stat != STAT_GOD) {
                    putnat(natp);
                    return 0;
                }
@@ -243,8 +243,7 @@ status(void)
        player->lasttime += minute * 60;
        natp->nat_minused += minute;
     }
-    if ((player->nstat & STAT_NORM) && !player->god
-       && natp->nat_minused > m_m_p_d) {
+    if (natp->nat_stat == STAT_ACTIVE && natp->nat_minused > m_m_p_d) {
        pr("Max minutes per day limit exceeded.\n");
        player->ncomstat = VIS;
     }
index 20aeafa49241155f3bdc38c36f030cb4e0437c4d..c2cca5ac80c7d9e4992ed9a3323b95b6419ed8f9 100644 (file)
@@ -68,7 +68,7 @@ natarg(s_char *arg, s_char *prompt)
        if (!player->god && !getcontact(getnatp(player->cnum), n)) {
            if ((np = getnatp(n)) == 0)
                return -1;
-           if ((np->nat_stat & STAT_GOD) == 0) {
+           if (np->nat_stat != STAT_GOD) {
                if (byname) {
                    pr("No such country exists.\n");
                    n = -1;
index 6a7ae50a4fbe9527e1910b85bdd440ad3adba77e..c1adf99a61b9fe6d03c50986f859f412639b9400 100644 (file)
@@ -102,7 +102,7 @@ wu(natid from, natid to, char *format, ...)
     np = getnatp(from);
     if (update_pending)
        return typed_wu(from, to, buf, TEL_UPDATE);
-    else if (np->nat_stat & STAT_GOD)
+    else if (np->nat_stat == STAT_GOD)
        return typed_wu(from, to, buf, TEL_BULLETIN);
     else
        return typed_wu(from, to, buf, TEL_NORM);
@@ -136,11 +136,8 @@ typed_wu(natid from, natid to, char *message, int type)
        mailbox(box, to);
 
     if (type != TEL_ANNOUNCE)
-       if ((np = getnatp(to)) == 0 ||
-           ((np->nat_stat & STAT_NORM) == 0 &&
-            (np->nat_stat & STAT_SANCT) == 0)) {
+       if ((np = getnatp(to)) == 0 || np->nat_stat < STAT_SANCT)
            return -1;
-       }
 #if !defined(_WIN32)
     if ((fd = open(box, O_WRONLY | O_APPEND, 0)) < 0) {
 #else
@@ -176,8 +173,7 @@ typed_wu(natid from, natid to, char *message, int type)
        logerror("telegram 'write' to #%d failed to close.", to);
     } else if (write_ok && type == TEL_ANNOUNCE) {
        for (to = 0; NULL != (np = getnatp(to)); to++) {
-           if (!(np->nat_stat & STAT_NORM) &&
-               !(np->nat_stat & STAT_SANCT))
+           if (np->nat_stat < STAT_SANCT)
                continue;
            if (!player->god && (getrejects(from, np) & REJ_ANNO))
                continue;
index b8b6087157340878ba6ff552b4773b63d7d792e7..a1322cc5f01893757368028a53a88ae35d971a9c 100644 (file)
@@ -54,13 +54,7 @@ age_levels(int etu)
     best_tech = 0.0;
     best_res = 0.0;
     for (i = 0; NULL != (np = getnatp(i)); i++) {
-       if ((np->nat_stat & STAT_NORM) == 0)
-           continue;
-
-       if (np->nat_stat & STAT_GOD)
-           continue;
-
-       if (np->nat_stat == VIS)
+       if (np->nat_stat != STAT_ACTIVE)
            continue;
 
        if (best_tech < np->nat_level[NAT_TLEV])
@@ -85,11 +79,11 @@ age_levels(int etu)
     best_tech /= 5;
     best_res /= 5;
     for (i = 0; NULL != (np = getnatp(i)); i++) {
-       if ((np->nat_stat & STAT_INUSE) == 0)
+       if (np->nat_stat == STAT_UNUSED)
            continue;
-       if (np->nat_stat & STAT_GOD)
+       if (np->nat_stat == STAT_GOD)
            continue;
-       if (np->nat_stat == VIS)
+       if (np->nat_stat == STAT_VIS)
            continue;
        level = np->nat_level[NAT_TLEV];
        if (level < best_tech && chance(0.2))
index 8da6a4e07c3facdb24ca172f91dfcabb8778b3e7..4057fc8de1047423b26343059e7fc5d6cc78b1b2 100644 (file)
@@ -120,7 +120,7 @@ update_main(void *unused)
        mil_dbl_pay = 0;
        if ((np = getnatp(x)) == (struct natstr *)0)
            continue;
-       if (np->nat_stat & STAT_SANCT) {
+       if (np->nat_stat == STAT_SANCT) {
 #ifdef DEBUG
            logerror("Country %i is in sanctuary and did not update", x);
 #endif
index 02a99da46706bbd8821e82689679a2af14c800cf..ed4128fe0e6d698be0911e8432bb8fc5c047648b 100644 (file)
@@ -140,7 +140,7 @@ prod_nat(int etu)
     struct natstr *cnp;
 
     for (n = 0; NULL != (np = getnatp(n)); n++) {
-       if ((np->nat_stat & STAT_NORM) == 0)
+       if (np->nat_stat < STAT_ACTIVE)
            continue;
        /*
         * hap_edu: the more education people have, the
@@ -190,7 +190,7 @@ prod_nat(int etu)
        memset(tech, 0, sizeof(tech));
     }
     for (n = 0; NULL != (np = getnatp(n)); n++) {
-       if ((np->nat_stat & STAT_NORM) == 0)
+       if (np->nat_stat < STAT_ACTIVE)
            continue;
        tlev = levels[n][NAT_TLEV];
        rlev = levels[n][NAT_RLEV];
@@ -241,21 +241,21 @@ share_incr(double *res, double *tech)
 
     for (i = 0; NULL != (np = getnatp(i)); i++) {
        res[i] = tech[i] = 0.0;
-       if ((np->nat_stat & STAT_INUSE) == 0)
+       if (np->nat_stat == STAT_UNUSED)
            continue;
-       if (np->nat_stat & STAT_GOD)
+       if (np->nat_stat == STAT_GOD)
            continue;
-       if (np->nat_stat == VIS)
+       if (np->nat_stat == STAT_VIS)
            continue;
        rnc = tnc = 0;
        for (j = 0; NULL != (other = getnatp(j)); j++) {
            if (j == i)
                continue;
-           if (other->nat_stat & STAT_GOD)
+           if (other->nat_stat == STAT_GOD)
                continue;
-           if (other->nat_stat == VIS)
+           if (other->nat_stat == STAT_VIS)
                continue;
-           if ((other->nat_stat & STAT_INUSE) == 0)
+           if (other->nat_stat == STAT_UNUSED)
                continue;
            if (opt_HIDDEN) {
                if (!getcontact(np, j))
index 39315a17f34d834377663a8a26111b4e4cb1e75f..fa3c5e26a6ef5aeb3e6e1d52531bbce9c4ac625b 100644 (file)
@@ -89,11 +89,11 @@ prepare_sects(int etu, int *bp)
        np = getnatp(sp->sct_own);
 
 #ifdef DEBUG
-       if (np->nat_stat & STAT_SANCT)
+       if (np->nat_stat == STAT_SANCT)
            logerror("Prepare.c: country in sanctuary skipped production");
 #endif /* DEBUG */
 
-       if (!(np->nat_stat & STAT_SANCT)) {
+       if (np->nat_stat != STAT_SANCT) {
            guerrilla(sp);
            do_plague(sp, np, etu);
            tax(sp, np, etu, &pops[sp->sct_own], &civ_tax, &uw_tax,
index c10ddf67980c332d573b77140666ad670af388fe..83ab96979e84c5e0f1070baef73bf522b95bf194 100644 (file)
@@ -45,7 +45,7 @@ update_removewants(void)
     struct natstr *natp;
 
     for (cn = 0; NULL != (natp = getnatp(cn)); cn++) {
-       if ((natp->nat_stat & STAT_INUSE) &&
+       if ((natp->nat_stat != STAT_UNUSED) &&
            (natp->nat_update & WUPD_WANT) == 0) {
            natp->nat_missed++;
        }
index 0f5b40e834e5b197ae3cfa9e374d41bb22ac837f..2295d4acd38e0fe54be726cfb045a0eeafdecad8 100644 (file)
@@ -213,7 +213,7 @@ guerrilla(struct sctstr *sp)
        return;
     }
     tnat = getnatp(target);
-    if ((tnat->nat_stat & STAT_INUSE) == 0) {
+    if (tnat->nat_stat == STAT_UNUSED) {
        /* target nation has dissolved: che's retire.  */
        logerror("%d Che targeted at country %d retiring", che, target);
        sp->sct_che = 0;
index ee5ba43708b4a67fc319fcacac831d6e77fd8ede..6960280be9026b5d5a169d30d91d333265bafffa 100644 (file)
@@ -136,7 +136,7 @@ main(int argc, char *argv[])
     nat.ef_type = EF_NATION;
     strcpy(nat.nat_cnam, "POGO");
     strcpy(nat.nat_pnam, "peter");
-    nat.nat_stat = STAT_INUSE | STAT_NORM | STAT_GOD;
+    nat.nat_stat = STAT_GOD;
     nat.nat_btu = 255;
     nat.nat_money = 123456789;
     nat.nat_cnum = 0;