From: Eric S. Raymond Date: Thu, 20 Jul 2017 13:08:10 +0000 (-0400) Subject: Remove special-case code that was inducing bugs. X-Git-Tag: 1.3~43 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=4e01669e06cebde88437935fd2b2938406cddcb5;p=open-adventure.git Remove special-case code that was inducing bugs. --- diff --git a/actions.c b/actions.c index 83177d4..209d257 100644 --- a/actions.c +++ b/actions.c @@ -1145,15 +1145,11 @@ static int rub(verb_t verb, obj_t obj) static int say(struct command_t *command) /* Say. Echo WD2 (or WD1 if no WD2 (SAY WHAT?, etc.).) Magic words override. */ { - if (command->raw2 != '\0') { - command->wd1 = command->wd2; - strncpy(command->raw1, command->raw2, LINESIZE - 1); - } - char word1[TOKLEN + 1]; - packed_to_token(command->wd1, word1); + char word2[TOKLEN + 1]; + packed_to_token(command->wd2, word2); long wd; enum wordtype type; - get_vocab_metadata(word1, &wd, &type); + get_vocab_metadata(word2, &wd, &type); if (wd == XYZZY || wd == PLUGH || wd == PLOVER || @@ -1163,11 +1159,9 @@ static int say(struct command_t *command) wd == FOO || wd == FUM || wd == PART) { - /* FIXME: scribbles on the interpreter's command block */ - wordclear(&command->wd2); - return GO_LOOKUP; + return GO_WORD2; } - sspeak(OKEY_DOKEY, command->raw1); + sspeak(OKEY_DOKEY, command->raw2); return GO_CLEAROBJ; } diff --git a/main.c b/main.c index 66f63f9..1a1f25d 100644 --- a/main.c +++ b/main.c @@ -1130,16 +1130,7 @@ Lclearobj: goto Lclearobj; } - /* Ugly translationms to get around word polyvalence. */ - if (command.type1 == ACTION && command.id1 == SAY - && command.id2 != WORD_NOT_FOUND && command.id2 != WORD_EMPTY) { - command.id1 = command.id2; - command.type1 = command.type2; - strncpy(command.raw1, command.raw2, LINESIZE - 1); - command.id2 = WORD_EMPTY; - command.type2 = NO_WORD_TYPE; - strncpy(command.raw2, "", LINESIZE - 1); - } else if (command.type1 == OBJECT) { + if (command.type1 == OBJECT) { if (!((command.id1 != WATER && command.id1 != OIL) || (command.id2 != PLANT && command.id2 != DOOR))) { if (AT(command.id2)) { command.id2 = POUR; @@ -1204,8 +1195,6 @@ Lookup: return true; case GO_TOP: continue; /* back to top of main interpreter loop */ - case GO_LOOKUP: - goto Lookup; case GO_WORD2: /* Get second word for analysis. */ command.id1 = command.id2;