From: Eric S. Raymond Date: Mon, 19 Jun 2017 20:53:55 +0000 (-0400) Subject: Concentrate all magic-number values for packed-string constants in one place. X-Git-Tag: 1.1~207 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=87961483a22111329eac6967705190ccd72330f6;p=open-adventure.git Concentrate all magic-number values for packed-string constants in one place. --- diff --git a/actions.c b/actions.c index c547b35..6cdc61d 100644 --- a/actions.c +++ b/actions.c @@ -82,7 +82,7 @@ static int attack(FILE *input, token_t verb, token_t obj) * too. Then do a null motion to get new description. */ RSPEAK(BARE_HANDS_QUERY); GETIN(input, &WD1, &WD1X, &WD2, &WD2X); - if (WD1 != MAKEWD(25) && WD1 != MAKEWD(250519)) + if (WD1 != MAKEWD(WORD_YINIT) && WD1 != MAKEWD(WORD_YES)) return GO_CHECKFOO; PSPEAK(DRAGON, 3); game.prop[DRAGON] = 1; diff --git a/advent.h b/advent.h index 08ae5e3..f199489 100644 --- a/advent.h +++ b/advent.h @@ -223,5 +223,83 @@ int action(FILE *input, enum speechpart part, token_t verb, token_t obj); /* hack to ignore GCC Unused Result */ #define IGNORE(r) do{if (r){}}while(0) +/* + * FIXME: These constants should be replaced by strings, at their usage sites. + * They are sixbit-packed representations of vocabulary words. This, and code + * left in misc.c, is the only place left in the runtime that knows about + * word packing. + */ +#define WORD_AXE 12405 +#define WORD_BATTERY 201202005 +#define WORD_BEAR 2050118 +#define WORD_BIRD 2091804 +#define WORD_BLOOD 212151504 +#define WORD_BOTTLE 215202012 +#define WORD_CAGE 3010705 +#define WORD_CATCH 301200308 +#define WORD_CAVITY 301220920 +#define WORD_CHASM 308011913 +#define WORD_CLAM 3120113 +#define WORD_DOOR 4151518 +#define WORD_DRAGON 418010715 +#define WORD_DWARF 423011806 +#define WORD_FISSURE 609191921 +#define WORD_FOOD 6151504 +#define WORD_GO 715 +#define WORD_GRATE 718012005 +#define WORD_KEYS 11052519 +#define WORD_KNIFE 1114090605 +#define WORD_LAMP 12011316 +#define WORD_MAGAZINE 1301070126 +#define WORD_MESSAG 1305191901 +#define WORD_MIRROR 1309181815 +#define WORD_OGRE 15071805 +#define WORD_OIL 150912 +#define WORD_OYSTER 1525192005 +#define WORD_PILLOW 1609121215 +#define WORD_PLANT 1612011420 +#define WORD_POUR 16152118 +#define WORD_RESER 1805190518 +#define WORD_ROD 181504 +#define WORD_SIGN 19090714 +#define WORD_SNAKE 1914011105 +#define WORD_STEPS 1920051619 +#define WORD_TROLL 2018151212 +#define WORD_URN 211814 +#define WORD_VEND 1755140409 +#define WORD_VOLCANO 1765120301 +#define WORD_WATER 1851200518 +#define WORD_AMBER 113020518 +#define WORD_CHAIN 308010914 +#define WORD_CHEST 308051920 +#define WORD_COINS 315091419 +#define WORD_EGGS 5070719 +#define WORD_EMERALD 513051801 +#define WORD_JADE 10010405 +#define WORD_NUGGET 7151204 +#define WORD_PEARL 1605011812 +#define WORD_PYRAMID 1625180113 +#define WORD_RUBY 18210225 +#define WORD_RUG 182107 +#define WORD_SAPPH 1901161608 +#define WORD_TRIDENT 2018090405 +#define WORD_VASE 22011905 +#define WORD_BACK 2010311 +#define WORD_CAVE 3012205 +#define WORD_DPRSSN 405161805 +#define WORD_ENTER 514200518 +#define WORD_ENTRNC 514201801 +#define WORD_LOOK 12151511 +#define WORD_NUL 14211212 +#define WORD_STREAM 1920180501 +#define WORD_FIND 6091404 +#define WORD_INVENT 914220514 +#define WORD_LOCK 12150311 +#define WORD_SAY 190125 +#define WORD_THROW 2008181523 +#define WORD_WEST 23051920 +#define WORD_YES 250519 +#define WORD_YINIT 25 + /* end */ diff --git a/init.c b/init.c index 79284d6..36f00b1 100644 --- a/init.c +++ b/init.c @@ -232,80 +232,80 @@ void initialise(void) } /* Define some handy mnemonics. These correspond to object numbers. */ - AXE = VOCWRD(12405, 1); - BATTERY = VOCWRD(201202005, 1); - BEAR = VOCWRD(2050118, 1); - BIRD = VOCWRD(2091804, 1); - BLOOD = VOCWRD(212151504, 1); - BOTTLE = VOCWRD(215202012, 1); - CAGE = VOCWRD(3010705, 1); - CAVITY = VOCWRD(301220920, 1); - CHASM = VOCWRD(308011913, 1); - CLAM = VOCWRD(3120113, 1); - DOOR = VOCWRD(4151518, 1); - DRAGON = VOCWRD(418010715, 1); - DWARF = VOCWRD(423011806, 1); - FISSURE = VOCWRD(609191921, 1); - FOOD = VOCWRD(6151504, 1); - GRATE = VOCWRD(718012005, 1); - KEYS = VOCWRD(11052519, 1); - KNIFE = VOCWRD(1114090605, 1); - LAMP = VOCWRD(12011316, 1); - MAGAZINE = VOCWRD(1301070126, 1); - MESSAG = VOCWRD(1305191901, 1); - MIRROR = VOCWRD(1309181815, 1); - OGRE = VOCWRD(15071805, 1); - OIL = VOCWRD(150912, 1); - OYSTER = VOCWRD(1525192005, 1); - PILLOW = VOCWRD(1609121215, 1); - PLANT = VOCWRD(1612011420, 1); + AXE = VOCWRD(WORD_AXE, 1); + BATTERY = VOCWRD(WORD_BATTERY, 1); + BEAR = VOCWRD(WORD_BEAR, 1); + BIRD = VOCWRD(WORD_BIRD, 1); + BLOOD = VOCWRD(WORD_BLOOD, 1); + BOTTLE = VOCWRD(WORD_BOTTLE, 1); + CAGE = VOCWRD(WORD_CAGE, 1); + CAVITY = VOCWRD(WORD_CAVITY, 1); + CHASM = VOCWRD(WORD_CHASM, 1); + CLAM = VOCWRD(WORD_CLAM, 1); + DOOR = VOCWRD(WORD_DOOR, 1); + DRAGON = VOCWRD(WORD_DRAGON, 1); + DWARF = VOCWRD(WORD_DWARF, 1); + FISSURE = VOCWRD(WORD_FISSURE, 1); + FOOD = VOCWRD(WORD_FOOD, 1); + GRATE = VOCWRD(WORD_GRATE, 1); + KEYS = VOCWRD(WORD_KEYS, 1); + KNIFE = VOCWRD(WORD_KNIFE, 1); + LAMP = VOCWRD(WORD_LAMP, 1); + MAGAZINE = VOCWRD(WORD_MAGAZINE, 1); + MESSAG = VOCWRD(WORD_MESSAG, 1); + MIRROR = VOCWRD(WORD_MIRROR, 1); + OGRE = VOCWRD(WORD_OGRE, 1); + OIL = VOCWRD(WORD_OIL, 1); + OYSTER = VOCWRD(WORD_OYSTER, 1); + PILLOW = VOCWRD(WORD_PILLOW, 1); + PLANT = VOCWRD(WORD_PLANT, 1); PLANT2 = PLANT + 1; - RESER = VOCWRD(1805190518, 1); - ROD = VOCWRD(181504, 1); + RESER = VOCWRD(WORD_RESER, 1); + ROD = VOCWRD(WORD_ROD, 1); ROD2 = ROD + 1; - SIGN = VOCWRD(19090714, 1); - SNAKE = VOCWRD(1914011105, 1); - STEPS = VOCWRD(1920051619, 1); - TROLL = VOCWRD(2018151212, 1); + SIGN = VOCWRD(WORD_SIGN, 1); + SNAKE = VOCWRD(WORD_SNAKE, 1); + STEPS = VOCWRD(WORD_STEPS, 1); + TROLL = VOCWRD(WORD_TROLL, 1); TROLL2 = TROLL + 1; - URN = VOCWRD(211814, 1); - VEND = VOCWRD(1755140409, 1); - VOLCANO = VOCWRD(1765120301, 1); - WATER = VOCWRD(1851200518, 1); + URN = VOCWRD(WORD_URN, 1); + VEND = VOCWRD(WORD_VEND, 1); + VOLCANO = VOCWRD(WORD_VOLCANO, 1); + WATER = VOCWRD(WORD_WATER, 1); /* Objects from MINTRS through MAXTRS are treasures. Here are a few. */ - AMBER = VOCWRD(113020518, 1); - CHAIN = VOCWRD(308010914, 1); - CHEST = VOCWRD(308051920, 1); - COINS = VOCWRD(315091419, 1); - EGGS = VOCWRD(5070719, 1); - EMERALD = VOCWRD(513051801, 1); - JADE = VOCWRD(10010405, 1); - NUGGET = VOCWRD(7151204, 1); - PEARL = VOCWRD(1605011812, 1); - PYRAMID = VOCWRD(1625180113, 1); - RUBY = VOCWRD(18210225, 1); - RUG = VOCWRD(182107, 1); - SAPPH = VOCWRD(1901161608, 1); - TRIDENT = VOCWRD(2018090405, 1); - VASE = VOCWRD(22011905, 1); + AMBER = VOCWRD(WORD_AMBER, 1); + CHAIN = VOCWRD(WORD_CHAIN, 1); + CHEST = VOCWRD(WORD_CHEST, 1); + COINS = VOCWRD(WORD_COINS, 1); + EGGS = VOCWRD(WORD_EGGS, 1); + EMERALD = VOCWRD(WORD_EMERALD, 1); + JADE = VOCWRD(WORD_JADE, 1); + NUGGET = VOCWRD(WORD_NUGGET, 1); + PEARL = VOCWRD(WORD_PEARL, 1); + PYRAMID = VOCWRD(WORD_PYRAMID, 1); + RUBY = VOCWRD(WORD_RUBY, 1); + RUG = VOCWRD(WORD_RUG, 1); + SAPPH = VOCWRD(WORD_SAPPH, 1); + TRIDENT = VOCWRD(WORD_TRIDENT, 1); + VASE = VOCWRD(WORD_VASE, 1); /* These are motion-verb numbers. */ - BACK = VOCWRD(2010311, 0); - CAVE = VOCWRD(3012205, 0); - DPRSSN = VOCWRD(405161805, 0); - ENTER = VOCWRD(514200518, 0); - ENTRNC = VOCWRD(514201801, 0); - LOOK = VOCWRD(12151511, 0); - NUL = VOCWRD(14211212, 0); - STREAM = VOCWRD(1920180501, 0); + BACK = VOCWRD(WORD_BACK, 0); + CAVE = VOCWRD(WORD_CAVE, 0); + DPRSSN = VOCWRD(WORD_DPRSSN, 0); + ENTER = VOCWRD(WORD_ENTER, 0); + ENTRNC = VOCWRD(WORD_ENTRNC, 0); + LOOK = VOCWRD(WORD_LOOK, 0); + NUL = VOCWRD(WORD_NUL, 0); + STREAM = VOCWRD(WORD_STREAM, 0); /* And some action verbs. */ - FIND = VOCWRD(6091404, 2); - INVENT = VOCWRD(914220514, 2); - LOCK = VOCWRD(12150311, 2); - SAY = VOCWRD(190125, 2); - THROW = VOCWRD(2008181523, 2); + FIND = VOCWRD(WORD_FIND, 2); + INVENT = VOCWRD(WORD_INVENT, 2); + LOCK = VOCWRD(WORD_LOCK, 2); + SAY = VOCWRD(WORD_SAY, 2); + THROW = VOCWRD(WORD_THROW, 2); /* Initialise the dwarves. game.dloc is loc of dwarves, * hard-wired in. game.odloc is prior loc of each dwarf, diff --git a/main.c b/main.c index 8791293..f79c68c 100644 --- a/main.c +++ b/main.c @@ -1062,18 +1062,18 @@ L2607: if (!((V1 != 1000 + WATER && V1 != 1000 + OIL) || (V2 != 1000 + PLANT && V2 != 1000 + DOOR))) { if (AT(V2 - 1000)) - WD2 = MAKEWD(16152118); + WD2 = MAKEWD(WORD_POUR); } if (V1 == 1000 + CAGE && V2 == 1000 + BIRD && HERE(CAGE) && HERE(BIRD)) - WD1 = MAKEWD(301200308); + WD1 = MAKEWD(WORD_CATCH); } L2620: - if (WD1 == MAKEWD(23051920)) { + if (WD1 == MAKEWD(WORD_WEST)) { ++game.iwest; if (game.iwest == 10) RSPEAK(W_IS_WEST); } - if (WD1 == MAKEWD( 715) && WD2 != 0) { + if (WD1 == MAKEWD(WORD_GO) && WD2 != 0) { if (++igo == 10) RSPEAK(GO_UNNEEDED); }