Without IGNORE, -Wunused-result throws a warning on fread(2).
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 9ad6cd4dadc8341ce736d553f63c741e55dff468..5b65e077b8565fd5b392e89c86beceb414152546 100644 (file)
--- a/main.c
+++ b/main.c
@@ -13,7 +13,7 @@
  * and for the offensive globals.  Applying the Structured Program
  * Theorem can be hard.
  */
-#define DEFINE_GLOBALS_FROM_INCLUDES
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdbool.h>
@@ -29,9 +29,6 @@
 
 struct game_t game;
 
-long LNLENG, LNPOSN;
-char rawbuf[LINESIZE], INLINE[LINESIZE + 1];
-
 FILE  *logfp = NULL, *rfp = NULL;
 bool oldstyle = false;
 bool editline = true;
@@ -45,7 +42,7 @@ static void sig_handler(int signo)
         if (logfp != NULL)
             fflush(logfp);
     }
-    exit(0);
+    exit(EXIT_FAILURE);
 }
 // LCOV_EXCL_STOP
 
@@ -116,7 +113,7 @@ int main(int argc, char *argv[])
 #endif
             fprintf(stderr,
                     "        -s suppress command editing\n");
-            exit(-1);
+            exit(EXIT_FAILURE);
             break;
         }
     }
@@ -521,7 +518,7 @@ static void croak(void)
  *  him, so we need game.oldlc2, which is the last place he was
  *  safe.) */
 
-static bool playermove(token_t verb, int motion)
+static bool playermove( int motion)
 {
     int scratchloc, travel_entry = tkey[game.loc];
     game.newloc = game.loc;
@@ -598,7 +595,6 @@ static bool playermove(token_t verb, int motion)
         if (T_TERMINATE(travel[travel_entry]) || travel[travel_entry].motion == motion)
             break;
         if (travel[travel_entry].stop) {
-            /* FIXME: Magic numbers! */
             /*  Couldn't find an entry matching the motion word passed
              *  in.  Various messages depending on word given. */
             int spk = CANT_APPLY;
@@ -610,8 +606,6 @@ static bool playermove(token_t verb, int motion)
                 spk = UNSURE_FACING;
             if (motion == OUTSIDE || motion == INSIDE)
                 spk = NO_INOUT_HERE;
-            if (verb == FIND || verb == INVENTORY)
-                spk = NEARBY;
             if (motion == XYZZY || motion == PLUGH)
                 spk = NOTHING_HAPPENS;
             if (motion == CRAWL)
@@ -625,6 +619,7 @@ static bool playermove(token_t verb, int motion)
     /* (ESR) We've found a destination that goes with the motion verb.
      * Next we need to check any conditional(s) on this destination, and
      * possibly on following entries. */
+    /* FIXME: Magic numbers related to move opcodes */
     do {
         for (;;) { /* L12 loop */
             for (;;) {
@@ -707,8 +702,8 @@ static bool playermove(token_t verb, int motion)
                      * so step out and block him.  (standard travel
                      * entries check for game.prop(TROLL)=0.)  Special
                      * stuff for bear. */
-                    if (game.prop[TROLL] == 1) {
-                        pspeak(TROLL, look, 1);
+                    if (game.prop[TROLL] == TROLL_PAIDONCE) {
+                        pspeak(TROLL, look, TROLL_PAIDONCE);
                         game.prop[TROLL] = 0;
                         move(TROLL2, 0);
                         move(TROLL2 + NOBJECTS, 0);
@@ -719,13 +714,13 @@ static bool playermove(token_t verb, int motion)
                         return true;
                     } else {
                         game.newloc = objects[TROLL].plac + objects[TROLL].fixd - game.loc;
-                        if (game.prop[TROLL] == 0)
-                            game.prop[TROLL] = 1;
+                        if (game.prop[TROLL] == TROLL_UNPAID)
+                            game.prop[TROLL] = TROLL_PAIDONCE;
                         if (!TOTING(BEAR))
                             return true;
                         rspeak(BRIDGE_COLLAPSE);
-                        game.prop[CHASM] = 1;
-                        game.prop[TROLL] = 2;
+                        game.prop[CHASM] = BRIDGE_WRECKED;
+                        game.prop[TROLL] = TROLL_GONE;
                         drop(BEAR, game.newloc);
                         game.fixed[BEAR] = -1;
                         game.prop[BEAR] = BEAR_DEAD;
@@ -781,7 +776,7 @@ static bool closecheck(void)
      *  have been activated, since we've found chest. */
     if (game.clock1 == 0) {
         game.prop[GRATE] = GRATE_CLOSED;
-        game.prop[FISSURE] = 0;
+        game.prop[FISSURE] = UNBRIDGED;
         for (int i = 1; i <= NDWARVES; i++) {
             game.dseen[i] = false;
             game.dloc[i] = 0;
@@ -998,7 +993,7 @@ static bool do_command()
             rspeak(TAME_BEAR);
         speak(msg);
         if (FORCED(game.loc)) {
-            if (playermove(command.verb, 1))
+            if (playermove(HERE))
                 return true;
             else
                 continue;      /* back to top of main interpreter loop */
@@ -1035,6 +1030,8 @@ L2600:
 
         /* This is where we get a new command from the user */
         char* input;
+        char inputbuf[LINESIZE];
+
         for (;;) {
             input = get_input();
             if (input == NULL)
@@ -1046,8 +1043,12 @@ L2600:
             if (strcmp(input, "") != 0)
                 break;
         }
+
+        strncpy(inputbuf, input, LINESIZE - 1);
+        linenoiseFree(input);
+
         long tokens[4];
-        tokenize(input, tokens);
+        tokenize(inputbuf, tokens);
         command.wd1 = tokens[0];
         command.wd1x = tokens[1];
         command.wd2 = tokens[2];
@@ -1100,7 +1101,7 @@ L2607:
             command.wd1x = command.wd2x;
             wordclear(&command.wd2);
         } else {
-            /* FIXME: Magic numbers */
+            /* FIXME: Magic numbers related to vocabulary */
             if (!((V1 != 1000 + WATER && V1 != 1000 + OIL) ||
                   (V2 != 1000 + PLANT && V2 != 1000 + DOOR))) {
                 if (AT(V2 - 1000))
@@ -1124,15 +1125,16 @@ Lookup:
         defn = get_vocab_id(word1);
         if (defn == -1) {
             /* Gee, I don't understand. */
-            if (fallback_handler(input))
+            if (fallback_handler(inputbuf))
                 continue;
             rspeak(DONT_KNOW, command.wd1, command.wd1x);
             goto L2600;
         }
+       /* FIXME: magic numbers related to vocabulary */
         kmod = MOD(defn, 1000);
         switch (defn / 1000) {
         case 0:
-            if (playermove(command.verb, kmod))
+            if (playermove(kmod))
                 return true;
             else
                 continue;      /* back to top of main interpreter loop */
@@ -1156,7 +1158,7 @@ Laction:
         case GO_TERMINATE:
             return true;
         case GO_MOVE:
-            playermove(command.verb, NUL);
+            playermove(NUL);
             return true;
         case GO_TOP:
             continue;  /* back to top of main interpreter loop */
@@ -1187,7 +1189,6 @@ Laction:
         default:
             BUG(ACTION_RETURNED_PHASE_CODE_BEYOND_END_OF_SWITCH); // LCOV_EXCL_LINE
         }
-        linenoiseFree(input);
     }
 }