594 lines
14 KiB
C
594 lines
14 KiB
C
|
|
/*
|
|
look-up vocabulary word in lex-ordered table. words may have
|
|
two entries with different codes. if minimum acceptable type
|
|
= 0, then return minimum of different codes. last word CANNOT
|
|
have two entries(due to binary sort).
|
|
word is the word to look up.
|
|
type is the minimum acceptable value,
|
|
if != 0 return %1000
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "advent.h"
|
|
#include "advdec.h"
|
|
|
|
static _CONST struct wac wc[] = {
|
|
"\"spelunker\"", 1016,
|
|
"22", 2053,
|
|
"22", 3012,
|
|
"34", 2053,
|
|
"34", 3013,
|
|
"4-leafed", 5034,
|
|
"7", 2053,
|
|
"7", 3011,
|
|
"?", 3051,
|
|
"above", 29,
|
|
"abra", 3050,
|
|
"abracd", 3050,
|
|
"across", 42,
|
|
"alacaz", 3050,
|
|
"all", 1109,
|
|
"altar", 90,
|
|
"and", 6001,
|
|
"answer", 2035,
|
|
"anvil", 1091,
|
|
"ascend", 29,
|
|
"at", 4009,
|
|
"attack", 2012,
|
|
"awaken", 2029,
|
|
"awkward", 26,
|
|
"axe", 1028,
|
|
"back", 8,
|
|
"ball", 1120,
|
|
"barren", 40,
|
|
"bat", 1104,
|
|
"bats", 1104,
|
|
"batshit", 1104,
|
|
"batteries", 1039,
|
|
"beans", 1024,
|
|
"bear", 1035,
|
|
"bed", 16,
|
|
"bedquilt", 70,
|
|
"bee", 1087,
|
|
"beehive", 1097,
|
|
"bees", 1087,
|
|
"billboard", 1116,
|
|
"bird", 1101,
|
|
"bitch", 2048,
|
|
"black", 5006,
|
|
"blast", 2023,
|
|
"blow", 2036,
|
|
"blowup", 2023,
|
|
"boat", 1048,
|
|
"book", 1110,
|
|
"booth", 1093,
|
|
"bottle", 1020,
|
|
"box", 1055,
|
|
"brass", 5004,
|
|
"break", 2028,
|
|
"bridge", 89,
|
|
"brief", 2026,
|
|
"broken", 54,
|
|
"broom", 1114,
|
|
"brush", 1114,
|
|
"brush", 2054,
|
|
"building", 12,
|
|
"bumble", 1087,
|
|
"burn", 2047,
|
|
"cage", 1004,
|
|
"cake", 1107, /* value must be
|
|
mushrooms + 1 */
|
|
"cakes", 1107,
|
|
"call", 2038,
|
|
"calm", 2010,
|
|
"canister", 1118,
|
|
"canyon", 25,
|
|
"cape", 1047,
|
|
"capture", 2001,
|
|
"carpet", 1040,
|
|
"carry", 2001,
|
|
"carving", 1115,
|
|
"cask", 1071,
|
|
"catch", 2001,
|
|
"cave", 67,
|
|
"cavern", 73,
|
|
"chain", 1064,
|
|
"chalice", 1070,
|
|
"chant", 2003,
|
|
"chasm", 1021, /* troll bridge */
|
|
"chest", 1055,
|
|
"chimney", 78,
|
|
"clam", 1014,
|
|
"click", 85,
|
|
"climb", 56,
|
|
"cloak", 1047,
|
|
"close", 2006,
|
|
"clover", 1073,
|
|
"cobble", 18,
|
|
"coins", 1054,
|
|
"comb", 1096,
|
|
"complain", 2048,
|
|
"continue", 7,
|
|
"continue", 2011,
|
|
"crack", 33,
|
|
"crap", 3106,
|
|
"crap!", 3106,
|
|
"crawl", 17,
|
|
"cross", 69,
|
|
"crown", 1066,
|
|
"crystal", 5033,
|
|
"cup", 1070,
|
|
"cupcakes", 1107,
|
|
"d", 30,
|
|
"dark", 22,
|
|
"debris", 51,
|
|
"defile", 23,
|
|
"depression", 63,
|
|
"descend", 30,
|
|
"describe", 2052,
|
|
"detonate", 2023,
|
|
"devour", 2014,
|
|
"diagnose", 2051,
|
|
"dial", 2039,
|
|
"diamond", 1051,
|
|
"diamonds", 1051,
|
|
"dig", 3066,
|
|
"discard", 2002,
|
|
"disturb", 2029,
|
|
"doff", 2002,
|
|
"dog", 1098,
|
|
"dome", 35,
|
|
"don", 2033,
|
|
"door", 1041, /* giant door */
|
|
"down", 30,
|
|
"down", 4008,
|
|
"downstream", 5,
|
|
"downward", 30,
|
|
"dragon", 1031,
|
|
"drawing", 1029,
|
|
"drink", 2015,
|
|
"drop", 2002,
|
|
"droplet", 1075,
|
|
"dump", 2002,
|
|
"dust", 2054,
|
|
"dwarf", 1017,
|
|
"dwarves", 1017,
|
|
"e", 43,
|
|
"east", 43,
|
|
"eat", 2014,
|
|
"egg", 1056,
|
|
"eggs", 1056,
|
|
"elfin", 5019,
|
|
"emerald", 1059,
|
|
"empty", 2013,
|
|
"enter", 3,
|
|
"entrance", 64,
|
|
"everything", 1109,
|
|
"examine", 2052,
|
|
"excavate", 3066,
|
|
"exit", 11,
|
|
"explore", 2011,
|
|
"extinguish", 2008,
|
|
"fee", 2025,
|
|
"fee", 3001,
|
|
"feed", 2021,
|
|
"fie", 2025,
|
|
"fie", 3002,
|
|
"fight", 2012,
|
|
"figure", 1027,
|
|
"fill", 2022,
|
|
"find", 2019,
|
|
"fissure", 1012,
|
|
"fling", 2017,
|
|
"floor", 58,
|
|
"flower", 1046,
|
|
"flowers", 1046,
|
|
"foe", 2025,
|
|
"foe", 3003,
|
|
"follow", 2011,
|
|
"foo", 2025,
|
|
"foo", 3004,
|
|
"food", 1019,
|
|
"forcd", 1,
|
|
"forest", 6,
|
|
"fork", 77,
|
|
"forward", 7,
|
|
"fountain", 1103,
|
|
"four-leafed", 5034,
|
|
"free", 2002,
|
|
"fresh", 5010,
|
|
"from", 4005,
|
|
"fuck", 3079,
|
|
"fuck!", 3079,
|
|
"fum", 2025,
|
|
"fum", 3005,
|
|
"gate", 2058,
|
|
"get", 2044,
|
|
"geyser", 1037, /* same as volcano */
|
|
"giant", 27,
|
|
"giant", 5029,
|
|
"glowing", 5031,
|
|
"gnome", 1105,
|
|
"go", 2011,
|
|
"gold", 1050,
|
|
"golden", 5001,
|
|
"goto", 2011,
|
|
"grab", 2032,
|
|
"grail", 1070,
|
|
"grate", 1003,
|
|
"green", 5032,
|
|
"grey", 5032,
|
|
"gripe", 2048,
|
|
"grotto", 91,
|
|
"guano", 1104,
|
|
"gully", 13,
|
|
"h20", 1081,
|
|
"hall", 38,
|
|
"headlamp", 1002,
|
|
"health", 2051,
|
|
"heave", 2017,
|
|
"heels", 1067,
|
|
"help", 3051,
|
|
"hike", 2011,
|
|
"hill", 2,
|
|
"hit", 2034,
|
|
"hive", 1097,
|
|
"hocus", 3050,
|
|
"hole", 52,
|
|
"holy", 5021,
|
|
"honey", 1096,
|
|
"honeycomb", 1096,
|
|
"horn", 1052,
|
|
"hound", 1098,
|
|
"house", 12,
|
|
"hurl", 2017,
|
|
"i", 2020,
|
|
"ice", 88,
|
|
"ignite", 2023,
|
|
"in", 19,
|
|
"in", 4001,
|
|
"insert", 2045,
|
|
"inside", 19,
|
|
"inside", 4001,
|
|
"into", 4001,
|
|
"inventory", 2020,
|
|
"inward", 19,
|
|
"iron", 5011,
|
|
"issue", 1016,
|
|
"jar", 1020,
|
|
"jerk", 2032,
|
|
"jewelry", 1053,
|
|
"jewels", 1053,
|
|
"jump", 39,
|
|
"keep", 2001,
|
|
"keg", 1071,
|
|
"key", 1090,
|
|
"keys", 1102,
|
|
"kick", 2034,
|
|
"kill", 2012,
|
|
"knapsack", 1108,
|
|
"knife", 1018,
|
|
"knives", 1018,
|
|
"knoll", 81,
|
|
"l", 2052,
|
|
"lamp", 1002,
|
|
"lantern", 1002,
|
|
"lead", 5023,
|
|
"leaden", 5023,
|
|
"leap", 39,
|
|
"leather", 5024,
|
|
"leave", 11,
|
|
"leave", 2037,
|
|
"ledge", 83,
|
|
"left", 36,
|
|
"light", 1002,
|
|
"little", 5012,
|
|
"lock", 2049,
|
|
"look", 2052,
|
|
"lost", 3068,
|
|
"low", 24,
|
|
"lyre", 1068,
|
|
"machine", 1038,
|
|
"magazine", 1016,
|
|
"main", 76,
|
|
"map", 2057,
|
|
"message", 1036,
|
|
"metal", 5035,
|
|
"ming", 5016,
|
|
"mirror", 1023,
|
|
"mist", 3069,
|
|
"moss", 1040,
|
|
"mumble", 2003,
|
|
"mushroom", 1106,
|
|
"mushrooms", 1106,
|
|
"n", 45,
|
|
"ne", 47,
|
|
"nest", 1056,
|
|
"north", 45,
|
|
"northeast", 47,
|
|
"northwest", 50,
|
|
"nothing", 2005,
|
|
"nowhere", 21,
|
|
"nugget", 1050,
|
|
"null", 21,
|
|
"nw", 50,
|
|
"oak", 5022,
|
|
"oaken", 5022,
|
|
"off", 4006,
|
|
"office", 76,
|
|
"oil", 1083, /* in bottle */
|
|
"on", 4002,
|
|
"onto", 4002,
|
|
"onward", 7,
|
|
"open", 2004,
|
|
"opensesame", 3050,
|
|
"oriental", 72,
|
|
"out", 11,
|
|
"outdoors", 32,
|
|
"outside", 11,
|
|
"over", 41,
|
|
"oyster", 1015,
|
|
"pantry", 57,
|
|
"passage", 23,
|
|
"pause", 2030,
|
|
"pearl", 1061,
|
|
"persian", 5002,
|
|
"peruse", 2027,
|
|
"peyote", 1106,
|
|
"phone", 1094,
|
|
"phonebooth", 1094,
|
|
"phuce", 82,
|
|
"pick", 2041,
|
|
"pillow", 1010,
|
|
"pirate", 1030,
|
|
"pirloc", 2059,
|
|
"piss", 3107,
|
|
"piss!", 3107,
|
|
"pit", 31,
|
|
"placate", 2010,
|
|
"plant", 1024,
|
|
"platinum", 5017,
|
|
"play", 2040,
|
|
"plover", 71,
|
|
"plugh", 65,
|
|
"pocus", 3050,
|
|
"pole", 1009,
|
|
"pool", 80,
|
|
"poster", 1113,
|
|
"pottery", 1058,
|
|
"pound", 2034,
|
|
"pour", 2013,
|
|
"pray", 92,
|
|
"prayer", 92,
|
|
"proceed", 2011,
|
|
"pull", 2032,
|
|
"punch", 2034,
|
|
"put", 2042,
|
|
"pyramid", 1060,
|
|
"q", 2018,
|
|
"quartz", 5036,
|
|
"quit", 2018,
|
|
"radium", 1119,
|
|
"rare", 5018,
|
|
"ration", 1019,
|
|
"read", 2027,
|
|
"refill", 2022,
|
|
"release", 2002,
|
|
"remove", 2046,
|
|
"reply", 2035,
|
|
"report", 2048,
|
|
"reservoir", 75,
|
|
"restore", 2031,
|
|
"retreat", 8,
|
|
"return", 8,
|
|
"right", 37,
|
|
"ring", 1072,
|
|
"road", 2,
|
|
"rock", 1119,
|
|
"rock", 15,
|
|
"rocks", 1092,
|
|
"rocks", 1115,
|
|
"rod", 1005,
|
|
"room", 59,
|
|
"rowboat", 1048,
|
|
"rub", 2016,
|
|
"ruby", 5020,
|
|
"rug", 1062,
|
|
"run", 2011,
|
|
"rusty", 5028,
|
|
"s", 46,
|
|
"sack", 1108,
|
|
"safe", 1112,
|
|
"saint-michel", 93,
|
|
"sandwich", 1019,
|
|
"sapphire", 1069,
|
|
"save", 2030,
|
|
"say", 2003,
|
|
"score", 2024,
|
|
"se", 48,
|
|
"secret", 66,
|
|
"sesame", 3050,
|
|
"shadowy", 5027,
|
|
"shake", 2009,
|
|
"shards", 1058,
|
|
"shatter", 2028,
|
|
"shazam", 3050,
|
|
"shelf", 83,
|
|
"shell", 74,
|
|
"shield", 1118,
|
|
"ship", 1048,
|
|
"shit", 3106,
|
|
"shit!", 3106,
|
|
"shoes", 1067,
|
|
"shut", 2006,
|
|
"silk", 5013,
|
|
"silken", 5013,
|
|
"silver", 5014,
|
|
"sing", 2003,
|
|
"slab", 61,
|
|
"slabroom", 61,
|
|
"slay", 2012,
|
|
"slide", 79,
|
|
"slippers", 1067,
|
|
"slit", 60,
|
|
"slugs", 1095,
|
|
"small", 5012,
|
|
"smash", 2028,
|
|
"snake", 1011,
|
|
"south", 46,
|
|
"southeast", 48,
|
|
"southwest", 49,
|
|
"spelunker", 1016,
|
|
"sphere", 1120,
|
|
"spices", 1063,
|
|
"stair", 10,
|
|
"stairs", 10,
|
|
"stalagmite", 1026,
|
|
"star", 5026,
|
|
"statue", 1074,
|
|
"steal", 2001,
|
|
"steel", 5025,
|
|
"steps", 1007,
|
|
"steps", 34,
|
|
"stick", 1049,
|
|
"sticks", 1049,
|
|
"stone", 1119,
|
|
"stop", 3139,
|
|
"stream", 14,
|
|
"strike", 2034,
|
|
"strum", 2040,
|
|
"suggest", 2048,
|
|
"surface", 20,
|
|
"suspend", 2030,
|
|
"sw", 49,
|
|
"sweep", 2054,
|
|
"swim", 3147,
|
|
"swing", 2009,
|
|
"sword", 1065,
|
|
"tablet", 1013,
|
|
"take", 2001,
|
|
"tame", 2010,
|
|
"tasty", 5030,
|
|
"telephone", 1094,
|
|
"terse", 2055,
|
|
"then", 6002,
|
|
"throw", 2017,
|
|
"thunder", 84,
|
|
"tiny", 5012,
|
|
"to", 4004,
|
|
"tome", 1110,
|
|
"toss", 2017,
|
|
"tote", 2001,
|
|
"travel", 2011,
|
|
"treasure", 5015,
|
|
"tree", 1074,
|
|
"tree", 3064,
|
|
"trees", 3064,
|
|
"trident", 1057,
|
|
"troll", 1033,
|
|
"tube", 1118,
|
|
"tunnel", 23,
|
|
"turn", 2043,
|
|
"u", 29,
|
|
"unbrief", 2026,
|
|
"unlock", 2050,
|
|
"unterse", 2055,
|
|
"up", 29,
|
|
"up", 4007,
|
|
"upon", 4002,
|
|
"upstream", 4,
|
|
"upward", 29,
|
|
"used", 5009,
|
|
"utter", 2003,
|
|
"valley", 9,
|
|
"vase", 1058,
|
|
"velvet", 5007,
|
|
"vending", 5008,
|
|
"view", 28,
|
|
"volcano", 1037,
|
|
"volume", 1110,
|
|
"w", 44,
|
|
"wake", 2029,
|
|
"waken", 2029,
|
|
"walk", 2011,
|
|
"wall", 53,
|
|
"wall", 1088, /* in blue grotto */
|
|
"wand", 1005,
|
|
"water", 1081, /* in bottle */
|
|
"wave", 2009,
|
|
"wear", 2033,
|
|
"west", 44,
|
|
"whack", 2034,
|
|
"where", 2019,
|
|
"whirl", 80,
|
|
"whirlpool", 80,
|
|
"whisk", 1114,
|
|
"whiskbroom", 1114,
|
|
"wicker", 5005,
|
|
"wine", 1085, /* in bottle */
|
|
"with", 4003,
|
|
"wiz", 2056,
|
|
"wolf", 1098,
|
|
"wooden", 5003,
|
|
"worn", 5009,
|
|
"worn-out", 5009,
|
|
"wornout", 5009,
|
|
"wumpus", 1099,
|
|
"xyzzy", 62,
|
|
"y2", 55,
|
|
"yank", 2032
|
|
};
|
|
|
|
#define MAXWC (sizeof(wc) / sizeof(struct wac))
|
|
|
|
_PROTOTYPE(int binary, (char *));
|
|
|
|
int vocab(word, type)
|
|
char *word;
|
|
int type;
|
|
{
|
|
int v1, v2, temp;
|
|
|
|
if ((v1 = binary(word)) >= 0) {
|
|
if (v1 > 0 && strcmp(word, wc[v1 - 1].aword) == 0)
|
|
v2 = v1 - 1;
|
|
else if (v1 < (MAXWC - 1) && strcmp(word, wc[v1 + 1].aword) == 0)
|
|
v2 = v1 + 1;
|
|
else
|
|
v2 = v1;
|
|
if (wc[v1].acode > wc[v2].acode) {
|
|
temp = v1;
|
|
v1 = v2;
|
|
v2 = temp;
|
|
}
|
|
if (type <= CLASS(wc[v1].acode))
|
|
return (wc[v1].acode);
|
|
else if (type <= CLASS(wc[v2].acode))
|
|
return (wc[v2].acode);
|
|
else
|
|
return (-1);
|
|
} else
|
|
return (-1);
|
|
}
|
|
|
|
int binary(w)
|
|
char *w;
|
|
{
|
|
int lo, mid, hi, check;
|
|
|
|
lo = 0;
|
|
hi = MAXWC - 1;
|
|
do {
|
|
mid = (lo + hi) / 2;
|
|
check = strcmp(w, wc[mid].aword);
|
|
if (check == 0)
|
|
return (mid);
|
|
else if (check < 0)
|
|
hi = mid - 1;
|
|
else
|
|
lo = mid + 1;
|
|
} while (lo <= hi);
|
|
return (-1);
|
|
}
|