Enable input editing with the linenoise library.
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 993cd523d11ea12f30335dc84bff577acd27ffd7..31eaf4691e9e68131b9f9530941e7a750204dd65 100644 (file)
--- a/main.c
+++ b/main.c
@@ -11,6 +11,7 @@
 #include <time.h>
 #include "advent.h"
 #include "database.h"
+#include "linenoise/linenoise.h"
 
 struct game_t game;
 
@@ -82,6 +83,8 @@ case 'l':
        }
     }
 
+    linenoiseHistorySetMaxLen(350);
+
     /* Logical variables:
      *
      *  game.closed says whether we're all the way closed
@@ -659,6 +662,7 @@ static bool do_command(FILE *cmdin)
        long KQ, VERB, KK, V1, V2;
        long obj, i;
        static long IGO = 0;
+       enum speechpart part;
 
        /*  Can't leave cave once it's closing (except by main office). */
        if (OUTSID(game.newloc) && game.newloc != 0 && game.closng) {
@@ -844,19 +848,22 @@ L2630:
           goto L3000;
        K=MOD(i,1000);
        KQ=i/1000+1;
-        switch (KQ-1) { case 0: goto L8; case 1: goto L5000; case 2: goto L4000;
-               case 3: goto L2010; }
+       switch (KQ-1)
+       {
+       case 0: goto L8;
+       case 1: goto L5000;
+       case 2: goto L4000;
+       case 3: goto L2010;
+       }
        BUG(22);
 
-/*  Get second word for analysis. */
-
+       /* Get second word for analysis. */
 L2800: WD1=WD2;
        WD1X=WD2X;
        WD2=0;
-        goto L2620;
-
-/*  Gee, I don't understand. */
+       goto L2620;
 
+        /* Gee, I don't understand. */
 L3000: SETPRM(1,WD1,WD1X);
         if (fallback_handler(rawbuf))
             return true;
@@ -865,11 +872,11 @@ L3000:    SETPRM(1,WD1,WD1X);
 
 /* Verb and object analysis moved to separate module. */
 
-L4000: i=4000; VERB=K; goto Laction;
-L4090: i=4090; goto Laction;
-L5000: i=5000; obj = K;
+L4000: part=intransitive; VERB=K; goto Laction;
+L4090: part=transitive; goto Laction;
+L5000: part=unknown; obj = K;
 Laction:
-        switch (action(cmdin, i, VERB, obj)) {
+        switch (action(cmdin, part, VERB, obj)) {
           case 2: return true;
           case 8: goto L8;
           case 2000: goto L2000;
@@ -887,18 +894,16 @@ Laction:
           }
        BUG(99);
 
-/*  Random intransitive verbs come here.  Clear obj just in case (see "attack").
-               */
-
+       /*  Random intransitive verbs come here.  Clear obj just in case
+        *  (see attack()). */
 L8000: SETPRM(1,WD1,WD1X);
        RSPEAK(257);
        obj=0;
        goto L2600;
 
-/*  Figure out the new location */
 
-L8:
-       if (playermove(cmdin, VERB))
+       /*  Figure out the new location */
+L8:    if (playermove(cmdin, VERB))
            return true;
        else
            goto L2000;