595 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			595 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| 
 | |
| /*
 | |
|   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);
 | |
| }
 | 
