More goto elimination.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 7c3d78ecf8ae96dd072d7914afe461da7005b9c7..6f21554de079a5dc3c73b774ccd4fb9c6889bcf8 100644 (file)
--- a/main.c
+++ b/main.c
@@ -41,8 +41,6 @@ long AMBER, AXE, BACK, BATTER, BEAR, BIRD, BLOOD,
                URN, VASE, VEND, VOLCAN, WATER;
 long WD1, WD1X, WD2, WD2X;
 
-static int K;  /* information leak, should go away */
-
 FILE  *logfp;
 bool oldstyle = false;
 lcg_state lcgstate;
@@ -676,7 +674,7 @@ static bool playermove(FILE *cmdin, token_t verb, int motion)
 static bool do_command(FILE *cmdin)
 {
        long KQ, VERB, KK, V1, V2;
-       long i;
+       long i, k, KMOD;
        static long igo = 0;
        static long obj = 0;
        enum speechpart part;
@@ -729,7 +727,7 @@ L2000:      if (game.loc == 0)
        }
        if (TOTING(BEAR))RSPEAK(141);
        newspeak(msg);
-       K=1;
+       KMOD=1;
        if (FORCED(game.loc)) {
            goto L8;
        }
@@ -826,8 +824,12 @@ L2607:     game.foobar=(game.foobar>0 ? -game.foobar : 0);
        if (game.trndex <= TRNVLS)
            game.thresh=MOD(TRNVAL[game.trndex],100000)+1;
        }
-       if (VERB == SAY && WD2 > 0)VERB=0;
-       if (VERB == SAY) goto L4090;
+       if (VERB == SAY && WD2 > 0)
+           VERB=0;
+       if (VERB == SAY) {
+           part=transitive;
+           goto Laction;
+       }
        if (game.tally == 0 && INDEEP(game.loc) && game.loc != 33)
            --game.clock1;
 
@@ -970,12 +972,12 @@ L2607:    game.foobar=(game.foobar>0 ? -game.foobar : 0);
                RSPEAK(spk);
            }
        }
-L19999: K=43;
-       if (LIQLOC(game.loc) == WATER)K=70;
+L19999: k=43;
+       if (LIQLOC(game.loc) == WATER)k=70;
        V1=VOCAB(WD1,-1);
        V2=VOCAB(WD2,-1);
        if (V1 == ENTER && (V2 == STREAM || V2 == 1000+WATER)) {
-           RSPEAK(K);
+           RSPEAK(k);
            goto L2012;
        }
        if (V1 == ENTER && WD2 > 0) {
@@ -1010,26 +1012,21 @@ L2630:
            RSPEAK(254);
            goto L2600;
        }
-       K=MOD(i,1000);
+       KMOD=MOD(i,1000);
        KQ=i/1000+1;
        switch (KQ-1)
        {
        case 0: goto L8;
-       case 1: goto L5000;
-       case 2: goto L4000;
-       case 3: RSPEAK(K); goto L2012;
+       case 1: part=unknown; obj = KMOD; break;
+       case 2: part=intransitive; VERB = KMOD; break;
+       case 3: RSPEAK(KMOD); goto L2012;
+       default: BUG(22);
        }
-       BUG(22);
-
-/* Verb and object analysis moved to separate module. */
 
-L4000: part=intransitive; VERB=K; goto Laction;
-L4090: part=transitive; goto Laction;
-L5000: part=unknown; obj = K;
 Laction:
         switch (action(cmdin, part, VERB, obj)) {
         case 2: return true;
-        case 8: K=NUL; goto L8;
+        case 8: KMOD=NUL; goto L8;
         case 2000: goto L2000;
         case 2012: goto L2012;
         case 2600: goto L2600;
@@ -1053,11 +1050,14 @@ Laction:
             RSPEAK(136);
             score(0);
             return true;
+        default:
+            BUG(99);
             }
-       BUG(99);
 
+        /* no fallthrough here */
+        
        /*  Figure out the new location */
-L8:    if (playermove(cmdin, VERB, K))
+L8:    if (playermove(cmdin, VERB, KMOD))
            return true;
        else
            goto L2000;