Use the raw buffer in tr command structure for editing.
authorEric S. Raymond <esr@thyrsus.com>
Mon, 3 Jul 2017 16:52:28 +0000 (12:52 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Mon, 3 Jul 2017 16:52:28 +0000 (12:52 -0400)
This fixes some minor bugs. Unknown words are no longer truncated
nor uppercased on echo.

13 files changed:
actions.c
advent.h
adventure.yaml
main.c
misc.c
notes.adoc
tests/illformed.chk
tests/lockchain.chk
tests/mazehint.chk
tests/oldstyle.chk
tests/urntest.chk
tests/vending.chk
tests/woodshint.chk

index 9ddbb56bde703c52e54c2a378b852c98775d785e..fdf2319023732c79b8ea27b75d42b88468351619 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -983,7 +983,7 @@ static int read(struct command_t command)
     }
 
     if (DARK(game.loc)) {
-        rspeak(NO_SEE, command.wd1, command.wd1x);
+        sspeak(NO_SEE, command.raw1);
     } else if (command.obj == OYSTER && !game.clshnt && game.closed) {
         game.clshnt = yes(arbitrary_messages[CLUE_QUERY], arbitrary_messages[WAYOUT_CLUE], arbitrary_messages[OK_MAN]);
     } else if (objects[command.obj].texts[0] == NULL ||
@@ -1240,7 +1240,7 @@ int action(struct command_t *command)
                     command->verb == INVENTORY) && command->wd2 <= 0)
             /* FALL THROUGH */;
         else {
-            rspeak(NO_SEE, command->wd1, command->wd1x);
+            sspeak(NO_SEE, command->raw1);
             return GO_CLEAROBJ;
         }
 
@@ -1437,7 +1437,7 @@ int action(struct command_t *command)
         }
     case unknown:
         /* Unknown verb, couldn't deduce object - might need hint */
-        rspeak(WHAT_DO, command->wd1, command->wd1x);
+        sspeak(WHAT_DO, command->raw1);
         return GO_CHECKHINT;
     default:
         BUG(SPEECHPART_NOT_TRANSITIVE_OR_INTRANSITIVE_OR_UNKNOWN); // LCOV_EXCL_LINE
index 8ef2f5b59c950b0471e3159f675d73b392324ae2..560b15010854fa7f5d389c78b8177da8f8ccba32 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -199,6 +199,7 @@ extern bool wordeq(token_t, token_t);
 extern bool wordempty(token_t);
 extern void wordclear(token_t *);
 extern void speak(const char*, ...);
+extern void sspeak(long msg, ...);
 extern void pspeak(vocab_t, enum speaktype, int, bool, ...);
 extern void rspeak(vocab_t, ...);
 extern void echo_input(FILE*, const char*, const char*);
index e35373c41eed821b91aad1ef8e041fbd1449cf51..039f4f9859c3da6d52c70d47f6717e34bbea7894 100644 (file)
@@ -3116,9 +3116,9 @@ arbitrary_messages:  !!omap
 - ONE_HIT: 'One of them gets you!'
 - NONE_HIT: 'None of them hits you!'
 - DONT_KNOW: 'Sorry, I don''t know the word "%s".'
-- WHAT_DO: 'What do you want to do with the %L%L?' # FIXME: %L%L should become %L once parsing no longer depends on packed tokens
-- NO_SEE: 'I see no %L%L here.' # FIXME: %L%L should become %L once parsing no longer depends on packed tokens
-- DO_WHAT: '%C what?'
+- WHAT_DO: 'What do you want to do with the %s?'
+- NO_SEE: 'I see no %s here.'
+- DO_WHAT: '%s what?'
 - OKEY_DOKEY: 'Okay, "%s".'
 - GARNERED_POINTS: 'You have garnered %d out of a possible %d points, using %d turn%S.'
 - SUSPEND_WARNING: |-
diff --git a/main.c b/main.c
index c2c4daa79a5029c26dfe06705b1cba99403d17a8..7cf987aa551faa2b085baab57ab6deeb0ec11df9 100644 (file)
--- a/main.c
+++ b/main.c
@@ -20,6 +20,7 @@
 #include <getopt.h>
 #include <signal.h>
 #include <string.h>
+#include <ctype.h>
 #include "advent.h"
 #include "dungeon.h"
 
@@ -1101,7 +1102,6 @@ L2607:
         }
         if (V1 == ENTER && command.wd2 > 0) {
             command.wd1 = command.wd2;
-            command.wd1x = command.wd2x;
             wordclear(&command.wd2);
         } else {
             /* FIXME: Magic numbers related to vocabulary */
@@ -1130,7 +1130,7 @@ Lookup:
             /* Gee, I don't understand. */
             if (fallback_handler(inputbuf))
                 continue;
-            rspeak(DONT_KNOW, command.wd1, command.wd1x);
+            sspeak(DONT_KNOW, command.raw1);
             goto L2600;
         }
         /* FIXME: magic numbers related to vocabulary */
@@ -1174,13 +1174,15 @@ Laction:
         case GO_WORD2:
             /* Get second word for analysis. */
             command.wd1 = command.wd2;
-            command.wd1x = command.wd2x;
+           strcpy(command.raw1, command.raw2);
             wordclear(&command.wd2);
+           command.raw2[0] = '\0';
             goto L2620;
         case GO_UNKNOWN:
             /*  Random intransitive verbs come here.  Clear obj just in case
              *  (see attack()). */
-            rspeak(DO_WHAT, command.wd1, command.wd1x);
+           command.raw1[0] = toupper(command.raw1[0]);
+            sspeak(DO_WHAT, command.raw1);
             command.obj = 0;
             goto L2600;
         case GO_DWARFWAKE:
diff --git a/misc.c b/misc.c
index a38c54657f42dd1fadffed8a561b28dbb10c9f28..c8cf9f13521ed1cb8ebba744977d42759ed00d3f 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -127,9 +127,7 @@ void tokenize(char* raw, struct command_t *cmd)
 
     // pack the substrings
     cmd->wd1  = token_to_packed(chunk_data[0]);
-    cmd->wd1x = token_to_packed(chunk_data[1]);
     cmd->wd2  = token_to_packed(chunk_data[2]);
-    cmd->wd2x = token_to_packed(chunk_data[3]);
 }
 
 /* Hide the fact that wods are corrently packed longs */
@@ -149,7 +147,7 @@ void wordclear(token_t *v)
     *v = 0;
 }
 
-/*  I/O routines (speak, pspeak, rspeak, get_input, yes) */
+/*  I/O routines (speak, pspeak, rspeak, sspeak, get_input, yes) */
 
 void vspeak(const char* msg, bool blank, va_list ap)
 {
@@ -253,6 +251,16 @@ void speak(const char* msg, ...)
     va_end(ap);
 }
 
+void sspeak(const long msg, ...)
+{
+    va_list ap;
+    va_start(ap, msg);
+    fputc('\n', stdout);
+    vprintf(arbitrary_messages[msg], ap);
+    fputc('\n', stdout);
+    va_end(ap);
+}
+
 void pspeak(vocab_t msg, enum speaktype mode, int skip, bool blank, ...)
 /* Find the skip+1st message from msg and print it.  Modes are:
  * feel = for inventory, what you can touch
index be36ddc6fba1203755ab21a2a750519ef478509d..c523cff5e076250a866a03d290dc7eb16a9b46b6 100644 (file)
@@ -52,6 +52,9 @@ Bug fixes:
  
 * Attempting to extinguish an unlit urn caused it to lose its oil.
 
+* Unrecognized words are no longer truncated to 5 characters and
+  uppercased when they are echoed.
+
 By default, advent issues "> " as a command prompt.  This feature
 became common in many variants after the original 350-point version,
 but was never backported into Crowther & Woods's main line before now.
index 39968574785ae20ecdc9680b2985a8755625cd20..b6c551b9eb63c70b7b7e3ef1c6e6fa7b9f2b0970 100644 (file)
@@ -251,7 +251,7 @@ Nothing happens.
 
 > find bar
 
-Sorry, I don't know the word "BAR".
+Sorry, I don't know the word "bar".
 
 > carry
 
@@ -388,7 +388,7 @@ you come to it.  To get the full description, say "look".
 
 > frob grate
 
-Sorry, I don't know the word "FROB".
+Sorry, I don't know the word "frob".
 
 > read grate
 
index ccb54cf78c273445d52fffdbed8fd4446cae7e7a..2c9cd4c074fcad6e4cd6d133c7bd84b501d2ed80 100644 (file)
@@ -617,7 +617,7 @@ A formidable ogre bars the northern exit.
 
 > attack
 
-Attac what?
+Attack what?
 
 > kill ogre
 
@@ -1606,7 +1606,7 @@ You can't carry anything more.  You'll have to drop something first.
 
 > pour bottle
 
-Bottl what?
+Bottle what?
 
 > n
 
index 02b315d79117162986ae79b378dcad529dfcf90b..67c11d6afbe01293bcc467caeaa53b6fe98ccca6 100644 (file)
@@ -208,7 +208,7 @@ OK
 
 > ew
 
-Sorry, I don't know the word "EW".
+Sorry, I don't know the word "ew".
 
 > w
 
index d8aa9bb19d682269b589c3ee6b5db10dc029d454..5deb6f2d63fb233a5930693d7b0011dec001aff3 100644 (file)
@@ -10,19 +10,19 @@ down a gully.
 
 i
 
-Sorry, I don't know the word "I".
+Sorry, I don't know the word "i".
 
 l
 
-Sorry, I don't know the word "L".
+Sorry, I don't know the word "l".
 
 x
 
-Sorry, I don't know the word "X".
+Sorry, I don't know the word "x".
 
 z
 
-Sorry, I don't know the word "Z".
+Sorry, I don't know the word "z".
 
 quit
 
index 8dec2a7b0836a37b3d75e568c74212f82fa24c0b..f3c8aa3374ab013781605b41e973d9dee44214c1 100644 (file)
@@ -2021,7 +2021,7 @@ The urn is now dark.
 
 > extinguish
 
-Extin what?
+Extinguish what?
 
 > look
 
index 001aa37daa1e36b30327aed5ae76ee8517cbea92..229dd89412253831e25b207d7e2da8dfa5df7a43 100644 (file)
@@ -298,7 +298,7 @@ section of wall, revealing a dark passage leading south.
 
 > attack
 
-Attac what?
+Attack what?
 
 > attack machine
 
index 23263f0d90c04f124ec85160c528fa4f793362d5..a2104d77132d82bdf44e82d269e9a7ae135ffab0 100644 (file)
@@ -162,11 +162,11 @@ Wake what?
 
 > quit nagging
 
-Sorry, I don't know the word "NAGGI".
+Sorry, I don't know the word "nagging".
 
 > nothing doing
 
-Sorry, I don't know the word "DOING".
+Sorry, I don't know the word "doing".
 
 > e