]> granicus.if.org Git - nethack/commitdiff
rumors.c static globals moved to instance_globals.
authorBart House <bart@barthouse.com>
Fri, 23 Nov 2018 18:05:21 +0000 (10:05 -0800)
committerBart House <bart@barthouse.com>
Fri, 23 Nov 2018 18:05:21 +0000 (10:05 -0800)
include/decl.h
src/decl.c
src/rumors.c

index a097dcc17be387f52fc2dd8c75ee6f4ad5eac3c4..f13efca214398a75deab4df7a80308ba429c99e1 100644 (file)
@@ -460,6 +460,19 @@ struct instance_globals {
     boolean m_using; /* kludge to use mondided instead of killed */
     /* pickup.c */
     int oldcap; /* last encumberance */
+    /* rumors.c */
+    long true_rumor_size; /* rumor size variables are signed so that value -1
+                            can be used as a flag */
+    long false_rumor_size;
+    unsigned long true_rumor_start; /* rumor start offsets are unsigned because
+                                       they're handled via %lx format */
+    unsigned long false_rumor_start;
+    long true_rumor_end; /* rumor end offsets are signed because they're 
+                            compared with [dlb_]ftell() */
+    long false_rumor_end;
+    int oracle_flg; /* -1=>don't use, 0=>need init, 1=>init done */
+    unsigned oracle_cnt; /* oracles are handled differently from rumors... */
+    unsigned long *oracle_loc;
     /* save.c */
     boolean havestate;
     unsigned ustuck_id; /* need to preserve during save */
index a71d5539dab599d18f4d93a8cc3661341579e797..c8aaf72757bfd9dfede0896c064f791d8828d749 100644 (file)
@@ -344,6 +344,16 @@ const struct instance_globals g_init = {
     FALSE, /* m_using */
     /* pickup.c */
     0,  /* oldcap */
+    /* rumors.c */
+    0, /* true_rumor_size */
+    0, /* false_rumor_size */
+    UNDEFINED, /* true_rumor_start*/
+    UNDEFINED, /* false_rumor_start*/
+    UNDEFINED, /* true_rumor_end */
+    UNDEFINED, /* false_rumor_end */
+    0, /* oracle_flag */
+    0, /* oracle_cnt */
+    NULL, /* oracle_loc */
     /* save.c */
     TRUE, /* havestate*/
     0, /* ustuck_id */
index a0f367952c662ffda27b6c7952fb2e89066db65d..fb84a6126f939903a04b55797ca29e5e890cfe48 100644 (file)
@@ -45,17 +45,6 @@ STATIC_DCL void FDECL(init_rumors, (dlb *));
 STATIC_DCL void FDECL(init_oracles, (dlb *));
 STATIC_DCL void FDECL(couldnt_open_file, (const char *));
 
-/* rumor size variables are signed so that value -1 can be used as a flag */
-static long true_rumor_size = 0L, false_rumor_size;
-/* rumor start offsets are unsigned because they're handled via %lx format */
-static unsigned long true_rumor_start, false_rumor_start;
-/* rumor end offsets are signed because they're compared with [dlb_]ftell() */
-static long true_rumor_end, false_rumor_end;
-/* oracles are handled differently from rumors... */
-static int oracle_flg = 0; /* -1=>don't use, 0=>need init, 1=>init done */
-static unsigned oracle_cnt = 0;
-static unsigned long *oracle_loc = 0;
-
 STATIC_OVL void
 init_rumors(fp)
 dlb *fp;
@@ -67,17 +56,17 @@ dlb *fp;
 
     (void) dlb_fgets(line, sizeof line, fp); /* skip "don't edit" comment */
     (void) dlb_fgets(line, sizeof line, fp);
-    if (sscanf(line, rumors_header, &true_count, &true_rumor_size,
-               &true_rumor_start, &false_count, &false_rumor_size,
-               &false_rumor_start, &eof_offset) == 7
-        && true_rumor_size > 0L
-        && false_rumor_size > 0L) {
-        true_rumor_end = (long) true_rumor_start + true_rumor_size;
-        /* assert( true_rumor_end == false_rumor_start ); */
-        false_rumor_end = (long) false_rumor_start + false_rumor_size;
-        /* assert( false_rumor_end == eof_offset ); */
+    if (sscanf(line, rumors_header, &true_count, &g.true_rumor_size,
+               &g.true_rumor_start, &false_count, &g.false_rumor_size,
+               &g.false_rumor_start, &eof_offset) == 7
+        && g.true_rumor_size > 0L
+        && g.false_rumor_size > 0L) {
+        g.true_rumor_end = (long) g.true_rumor_start + g.true_rumor_size;
+        /* assert( g.true_rumor_end == false_rumor_start ); */
+        g.false_rumor_end = (long) g.false_rumor_start + g.false_rumor_size;
+        /* assert( g.false_rumor_end == eof_offset ); */
     } else {
-        true_rumor_size = -1L; /* init failed */
+        g.true_rumor_size = -1L; /* init failed */
         (void) dlb_fclose(fp);
     }
 }
@@ -98,7 +87,7 @@ boolean exclude_cookie;
     char *endp, line[BUFSZ], xbuf[BUFSZ];
 
     rumor_buf[0] = '\0';
-    if (true_rumor_size < 0L) /* we couldn't open RUMORFILE */
+    if (g.true_rumor_size < 0L) /* we couldn't open RUMORFILE */
         return rumor_buf;
 
     rumors = dlb_fopen(RUMORFILE, "r");
@@ -109,9 +98,9 @@ boolean exclude_cookie;
 
         do {
             rumor_buf[0] = '\0';
-            if (true_rumor_size == 0L) { /* if this is 1st outrumor() */
+            if (g.true_rumor_size == 0L) { /* if this is 1st outrumor() */
                 init_rumors(rumors);
-                if (true_rumor_size < 0L) { /* init failed */
+                if (g.true_rumor_size < 0L) { /* init failed */
                     Sprintf(rumor_buf, "Error reading \"%.80s\".", RUMORFILE);
                     return rumor_buf;
                 }
@@ -124,13 +113,13 @@ boolean exclude_cookie;
             switch (adjtruth = truth + rn2(2)) {
             case 2: /*(might let a bogus input arg sneak thru)*/
             case 1:
-                beginning = (long) true_rumor_start;
-                tidbit = Rand() % true_rumor_size;
+                beginning = (long) g.true_rumor_start;
+                tidbit = Rand() % g.true_rumor_size;
                 break;
             case 0: /* once here, 0 => false rather than "either"*/
             case -1:
-                beginning = (long) false_rumor_start;
-                tidbit = Rand() % false_rumor_size;
+                beginning = (long) g.false_rumor_start;
+                tidbit = Rand() % g.false_rumor_size;
                 break;
             default:
                 impossible("strange truth value for rumor");
@@ -139,7 +128,7 @@ boolean exclude_cookie;
             (void) dlb_fseek(rumors, beginning + tidbit, SEEK_SET);
             (void) dlb_fgets(line, sizeof line, rumors);
             if (!dlb_fgets(line, sizeof line, rumors)
-                || (adjtruth > 0 && dlb_ftell(rumors) > true_rumor_end)) {
+                || (adjtruth > 0 && dlb_ftell(rumors) > g.true_rumor_end)) {
                 /* reached end of rumors -- go back to beginning */
                 (void) dlb_fseek(rumors, beginning, SEEK_SET);
                 (void) dlb_fgets(line, sizeof line, rumors);
@@ -157,7 +146,7 @@ boolean exclude_cookie;
             exercise(A_WIS, (adjtruth > 0));
     } else {
         couldnt_open_file(RUMORFILE);
-        true_rumor_size = -1; /* don't try to open it again */
+        g.true_rumor_size = -1; /* don't try to open it again */
     }
 /* this is safe either way, so do it always since we can't get the definition
  * out of makedefs.c
@@ -187,7 +176,7 @@ rumor_check()
     winid tmpwin;
     char *endp, line[BUFSZ], xbuf[BUFSZ], rumor_buf[BUFSZ];
 
-    if (true_rumor_size < 0L) { /* we couldn't open RUMORFILE */
+    if (g.true_rumor_size < 0L) { /* we couldn't open RUMORFILE */
     no_rumors:
         pline("rumors not accessible.");
         return;
@@ -199,9 +188,9 @@ rumor_check()
         long ftell_rumor_start = 0L;
 
         rumor_buf[0] = '\0';
-        if (true_rumor_size == 0L) { /* if this is 1st outrumor() */
+        if (g.true_rumor_size == 0L) { /* if this is 1st outrumor() */
             init_rumors(rumors);
-            if (true_rumor_size < 0L)
+            if (g.true_rumor_size < 0L)
                 goto no_rumors; /* init failed */
         }
         tmpwin = create_nhwindow(NHW_TEXT);
@@ -213,17 +202,17 @@ rumor_check()
         Sprintf(
             rumor_buf,
             "T start=%06ld (%06lx), end=%06ld (%06lx), size=%06ld (%06lx)",
-            (long) true_rumor_start, true_rumor_start, true_rumor_end,
-            (unsigned long) true_rumor_end, true_rumor_size,
-            (unsigned long) true_rumor_size);
+            (long) g.true_rumor_start, g.true_rumor_start, g.true_rumor_end,
+            (unsigned long) g.true_rumor_end, g.true_rumor_size,
+            (unsigned long) g.true_rumor_size);
         putstr(tmpwin, 0, rumor_buf);
 
         Sprintf(
             rumor_buf,
             "F start=%06ld (%06lx), end=%06ld (%06lx), size=%06ld (%06lx)",
-            (long) false_rumor_start, false_rumor_start, false_rumor_end,
-            (unsigned long) false_rumor_end, false_rumor_size,
-            (unsigned long) false_rumor_size);
+            (long) g.false_rumor_start, g.false_rumor_start, g.false_rumor_end,
+            (unsigned long) g.false_rumor_end, g.false_rumor_size,
+            (unsigned long) g.false_rumor_size);
         putstr(tmpwin, 0, rumor_buf);
 
         /*
@@ -234,7 +223,7 @@ rumor_check()
          * the value read in rumors, and display it.
          */
         rumor_buf[0] = '\0';
-        (void) dlb_fseek(rumors, (long) true_rumor_start, SEEK_SET);
+        (void) dlb_fseek(rumors, (long) g.true_rumor_start, SEEK_SET);
         ftell_rumor_start = dlb_ftell(rumors);
         (void) dlb_fgets(line, sizeof line, rumors);
         if ((endp = index(line, '\n')) != 0)
@@ -244,7 +233,7 @@ rumor_check()
         putstr(tmpwin, 0, rumor_buf);
         /* find last true rumor */
         while (dlb_fgets(line, sizeof line, rumors)
-               && dlb_ftell(rumors) < true_rumor_end)
+               && dlb_ftell(rumors) < g.true_rumor_end)
             continue;
         if ((endp = index(line, '\n')) != 0)
             *endp = 0;
@@ -252,7 +241,7 @@ rumor_check()
         putstr(tmpwin, 0, rumor_buf);
 
         rumor_buf[0] = '\0';
-        (void) dlb_fseek(rumors, (long) false_rumor_start, SEEK_SET);
+        (void) dlb_fseek(rumors, (long) g.false_rumor_start, SEEK_SET);
         ftell_rumor_start = dlb_ftell(rumors);
         (void) dlb_fgets(line, sizeof line, rumors);
         if ((endp = index(line, '\n')) != 0)
@@ -262,7 +251,7 @@ rumor_check()
         putstr(tmpwin, 0, rumor_buf);
         /* find last false rumor */
         while (dlb_fgets(line, sizeof line, rumors)
-               && dlb_ftell(rumors) < false_rumor_end)
+               && dlb_ftell(rumors) < g.false_rumor_end)
             continue;
         if ((endp = index(line, '\n')) != 0)
             *endp = 0;
@@ -274,7 +263,7 @@ rumor_check()
         destroy_nhwindow(tmpwin);
     } else {
         couldnt_open_file(RUMORFILE);
-        true_rumor_size = -1; /* don't try to open it again */
+        g.true_rumor_size = -1; /* don't try to open it again */
     }
 }
 
@@ -379,11 +368,11 @@ dlb *fp;
     (void) dlb_fgets(line, sizeof line, fp); /* skip "don't edit" comment*/
     (void) dlb_fgets(line, sizeof line, fp);
     if (sscanf(line, "%5d\n", &cnt) == 1 && cnt > 0) {
-        oracle_cnt = (unsigned) cnt;
-        oracle_loc = (unsigned long *) alloc((unsigned) cnt * sizeof(long));
+        g.oracle_cnt = (unsigned) cnt;
+        g.oracle_loc = (unsigned long *) alloc((unsigned) cnt * sizeof(long));
         for (i = 0; i < cnt; i++) {
             (void) dlb_fgets(line, sizeof line, fp);
-            (void) sscanf(line, "%5lx\n", &oracle_loc[i]);
+            (void) sscanf(line, "%5lx\n", &g.oracle_loc[i]);
         }
     }
     return;
@@ -394,14 +383,14 @@ save_oracles(fd, mode)
 int fd, mode;
 {
     if (perform_bwrite(mode)) {
-        bwrite(fd, (genericptr_t) &oracle_cnt, sizeof oracle_cnt);
-        if (oracle_cnt)
-            bwrite(fd, (genericptr_t) oracle_loc, oracle_cnt * sizeof(long));
+        bwrite(fd, (genericptr_t) &g.oracle_cnt, sizeof g.oracle_cnt);
+        if (g.oracle_cnt)
+            bwrite(fd, (genericptr_t) g.oracle_loc, g.oracle_cnt * sizeof(long));
     }
     if (release_data(mode)) {
-        if (oracle_cnt) {
-            free((genericptr_t) oracle_loc);
-            oracle_loc = 0, oracle_cnt = 0, oracle_flg = 0;
+        if (g.oracle_cnt) {
+            free((genericptr_t) g.oracle_loc);
+            g.oracle_loc = 0, g.oracle_cnt = 0, g.oracle_flg = 0;
         }
     }
 }
@@ -410,11 +399,11 @@ void
 restore_oracles(fd)
 int fd;
 {
-    mread(fd, (genericptr_t) &oracle_cnt, sizeof oracle_cnt);
-    if (oracle_cnt) {
-        oracle_loc = (unsigned long *) alloc(oracle_cnt * sizeof(long));
-        mread(fd, (genericptr_t) oracle_loc, oracle_cnt * sizeof(long));
-        oracle_flg = 1; /* no need to call init_oracles() */
+    mread(fd, (genericptr_t) &g.oracle_cnt, sizeof g.oracle_cnt);
+    if (g.oracle_cnt) {
+        g.oracle_loc = (unsigned long *) alloc(g.oracle_cnt * sizeof(long));
+        mread(fd, (genericptr_t) g.oracle_loc, g.oracle_cnt * sizeof(long));
+        g.oracle_flg = 1; /* no need to call init_oracles() */
     }
 }
 
@@ -431,27 +420,27 @@ boolean delphi;
 
     /* early return if we couldn't open ORACLEFILE on previous attempt,
        or if all the oracularities are already exhausted */
-    if (oracle_flg < 0 || (oracle_flg > 0 && oracle_cnt == 0))
+    if (g.oracle_flg < 0 || (g.oracle_flg > 0 && g.oracle_cnt == 0))
         return;
 
     oracles = dlb_fopen(ORACLEFILE, "r");
 
     if (oracles) {
         winid tmpwin;
-        if (oracle_flg == 0) { /* if this is the first outoracle() */
+        if (g.oracle_flg == 0) { /* if this is the first outoracle() */
             init_oracles(oracles);
-            oracle_flg = 1;
-            if (oracle_cnt == 0)
+            g.oracle_flg = 1;
+            if (g.oracle_cnt == 0)
                 return;
         }
         /* oracle_loc[0] is the special oracle;
            oracle_loc[1..oracle_cnt-1] are normal ones */
-        if (oracle_cnt <= 1 && !special)
+        if (g.oracle_cnt <= 1 && !special)
             return; /*(shouldn't happen)*/
-        oracle_idx = special ? 0 : rnd((int) oracle_cnt - 1);
-        (void) dlb_fseek(oracles, (long) oracle_loc[oracle_idx], SEEK_SET);
+        oracle_idx = special ? 0 : rnd((int) g.oracle_cnt - 1);
+        (void) dlb_fseek(oracles, (long) g.oracle_loc[oracle_idx], SEEK_SET);
         if (!special) /* move offset of very last one into this slot */
-            oracle_loc[oracle_idx] = oracle_loc[--oracle_cnt];
+            g.oracle_loc[oracle_idx] = g.oracle_loc[--g.oracle_cnt];
 
         tmpwin = create_nhwindow(NHW_TEXT);
         if (delphi)
@@ -473,7 +462,7 @@ boolean delphi;
         (void) dlb_fclose(oracles);
     } else {
         couldnt_open_file(ORACLEFILE);
-        oracle_flg = -1; /* don't try to open it again */
+        g.oracle_flg = -1; /* don't try to open it again */
     }
 }
 
@@ -515,7 +504,7 @@ struct monst *oracl;
         break;
     case 'n':
         if (umoney <= (long) minor_cost /* don't even ask */
-            || (oracle_cnt == 1 || oracle_flg < 0))
+            || (g.oracle_cnt == 1 || g.oracle_flg < 0))
             return 0;
         Sprintf(qbuf, "\"Then dost thou desire a major one?\" (%d %s)",
                 major_cost, currency((long) major_cost));