page@swan.ulowell.edu (Bob Page) (02/02/89)
Submitted-by: ejkst@unix.cis.pittsburgh.edu (Eric J. Kennedy) Posting-number: Volume 89, Issue 11 Archive-name: fun/world.4 # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # parser.c # vtext.dat.ac # This archive created: Mon Jan 30 18:06:39 1989 cat << \SHAR_EOF > parser.c #include "parame.inc" #include "variab.h" #include "arrays.h" #include "vocab.inc" #include "verbtb.inc" #define abs(A) ((A < 0) ? -A : A) /* World C Version 1.00 copyright 1987 J.D.McDonald Use as you like for non-commercial purposes, but please leave this note, and document any changes you make as yours */ /* No apologies for all the goto's. If you can get rid of them, well, I guess some persons are just naturally masochists */ static int typlst[4] = {VRBMIN, ADJMIN, NUNMIN, PRPMIN}; static int index[5], indx; scan() /* * this function scans the input line for gross syntax errors it also expands * special direction commands such as "ne" into their full form. it also * works on adverbs, removes such expressions as "ask frog," etc. finally it * puts the word numbers and types in the wrdnum and wrdtyp arrays the input * is inbuf ,the output is wrdnum,wrdtyp,actor,adverb * */ { int result, offlg, askx, lptr0, wptr, i, lxx, errno; result = 0; offlg = 0; chgact = 0; askx = 0; lab5: adverb = 0; for (i = 0; i < 30; i++) { wrdnum[i] = 0; wrdtyp[i] = 0; } /* * wordtyp is -1 for a period,-2 comma 1 for adverb,2 verb,3 adjective,4 * noun,5 preposition numbers are type 4,and wrdnum=number+10000 */ wptr = 0; lab10: lptr0 = lptr; wscan(); /* * on return from wscan punct contains: 0 for a word 1 for a period 2 for * a comma 3 for a number 4 if an illegal character 5 if a number follows * a letter directly 6 if a letter follows a number directly */ if (punct == 1) return (result); else if (punct == 4) goto lab9000; else if (punct == 2) goto lab9010; else if (punct == 3) goto lab9019; else if (punct == 5) goto lab9020; else if (punct == 6) goto lab9140; else; /* it's a real word, so find out what it is */ find(VOCMAX); /* discard buzzword */ if (indx > 0 && indx <= BUZMAX) goto lab10; if (indx == 0) goto lab9040; if ((indx >= NORTH && indx <= NORTHW) || indx == UP || indx == DOWN) { /* yes,it's a special word */ lptr0 = lptr; wscan(); /* check if it's all that's on the line */ if (punct != 1) goto lab9030; /* expand a direction word into full form */ wrdtyp[1] = 4; wrdnum[1] = indx; wrdnum[0] = GO; wrdtyp[0] = 2; wrdtyp[2] = -1; goto lab9999; } if (index[0] != 0) { if (adverb != 0) goto lab9070; /* adverbs are removed from the wrdtyp list and handled separately */ adverb = index[0]; if (adverb != WHERE && adverb != WHAT) goto lab10; if (actor == 1 || askx != ASK) goto lab9130; goto lab10; } if (index[1] == 0) goto lab9050; wrdtyp[wptr] = 2; wrdnum[wptr] = index[1]; /* * we've found the verb check for legal question */ if ((adverb == WHAT || adverb == WHERE) - (wrdnum[0] == IS)) goto lab9130; if (wrdnum[0] == YELL) { /* the player is told to use "ask" or "tell" */ lab131: wscan(); if (punct != 1) goto lab131; wrdtyp[0] = 2; wrdnum[0] = YELL; result = 1; return (result); } if (wrdnum[0] < SHIT) goto lab200; /* * special handling for words which take no objects or modifiers they * should be alone on a line. they are verbs >= shit */ lptr0 = lptr; wscan(); { if (punct == 1) goto lab9998; else if (punct == 5) goto lab9120; else goto lab9150; } /* inner loop for all words after verb */ lab200: wptr += 1; if (wptr > 27) goto lab9180; lab201: lptr0 = lptr; wscan(); if (punct != 0) goto lab210; find(BUZMAX); /* special code for "noun1 of noun2" construct */ if (indx == 4 && wrdtyp[wptr - 1] == 4) offlg = 1; if (indx != 0) goto lab201; goto lab215; lab210: if (punct == 4) goto lab9000; if (punct == 5) goto lab9020; if (punct == 6) goto lab9140; if (punct != 2) goto lab215; if (wrdtyp[wptr - 1] != 4) goto lab9010; wrdtyp[wptr] = -2; goto lab200; lab215: if (wrdtyp[wptr - 1] != 2 || (wrdnum[wptr - 1] != ASK && wrdnum[wptr - 1] != TELL)) goto lab220; if (punct == 3) goto lab9019; if (punct != 0) goto lab9010; if (actor != 1) goto lab9100; /* * this code is to set up addressing a second "person" the phrases "ask * frog" or "tell frog" etc are discarded and the variable "actor" tells * us who is addressed */ askx = wrdnum[wptr - 1]; find(VOCMAX); if ((index[3] != 0) && (index[3] < ROBOT || index[3] > FERRET)) goto lab9090; if (index[3] == 0) goto lab9160; actor = index[3]; lptr0 = lptr; chgact = 1; wscan(); if (punct != 2) goto lab9110; goto lab5; /* code for numbers inputted in a statement */ lab220: if (punct != 3) goto lab240; wrdtyp[wptr] = 4; wrdnum[wptr] = three[0] + 10000; goto lab200; /* all regular words go here */ lab240: if (punct != 1) goto lab250; wrdtyp[wptr] = -1; goto lab9999; lab250: find(VOCMAX); if (indx == 0) goto lab9040; /* special code for "of" handler */ if (offlg) { offlg = 0; if (index[3] != 0 && wrdtyp[wptr - 2] != 3) { /* exchange two nouns and tell parser the first is an adjective */ wrdtyp[wptr] = wrdtyp[wptr - 1]; wrdnum[wptr] = wrdnum[wptr - 1]; wrdtyp[wptr - 1] = 3; wrdnum[wptr - 1] = index[3]; if (wrdnum[wptr] == PHOTOG && wrdnum[wptr - 1] == FERRET) { wrdnum[wptr - 1] = FAMILY; } goto lab200; } else goto lab9200; } if (indx != AND) goto lab270; if (wrdtyp[wptr - 1] == -2) goto lab201; if (wrdtyp[wptr - 1] != 4) goto lab9120; wrdtyp[wptr] = -2; goto lab200; lab270: if (index[1] != 0 && index[0] == 0 && index[2] == 0 && index[3] == 0 && index[4] == 0) goto lab9080; if (index[0] == 0) goto lab280; if (adverb != 0) goto lab9070; adverb = indx; if (adverb == WHERE || adverb == WHAT) goto lab9130; goto lab201; /* at this point the word must be an adjectine, noun or preposition */ lab280: if (wrdtyp[wptr - 1] == 3 && index[2] != 0) goto lab9170; if (index[2] != 0) { wrdtyp[wptr] = 3; wrdnum[wptr] = index[2]; } else if (index[3] != 0) { wrdtyp[wptr] = 4; wrdnum[wptr] = index[3]; } else { wrdtyp[wptr] = 5; wrdnum[wptr] = index[4]; } if ((wrdtyp[wptr] == 4 && wrdtyp[wptr - 1] == 3) && wrdnum[wptr] < SAPPHI) goto lab9190; goto lab200; /*********** error processing */ lab9000: lxx = lptr; errno = 1; goto lab9900; lab9010: lxx = lptr; errno = 2; goto lab9900; lab9019: lptr -= 1; lab9020: lptr += 1; lxx = lptr; errno = 3; goto lab9900; lab9030: lxx = lptr; errno = 4; goto lab9900; lab9040: lxx = lptr; errno = 5; goto lab9900; lab9050: lxx = lptr; errno = 6; goto lab9900; lab9070: lxx = lptr; errno = 8; goto lab9900; lab9080: lxx = lptr; errno = 9; goto lab9900; lab9090: lxx = 0; errno = 10; goto lab9900; lab9100: lxx = 0; errno = 11; goto lab9900; lab9110: lxx = lptr0 + 1; errno = 12; goto lab9900; lab9120: lxx = lptr; errno = 13; goto lab9900; lab9130: lxx = 0; errno = 14; goto lab9900; lab9140: lxx = lptr; errno = 15; goto lab9900; lab9150: lxx = lptr0; errno = 16; goto lab9900; lab9160: lxx = 0; errno = 17; goto lab9900; lab9170: lxx = lptr; errno = 18; goto lab9900; lab9180: lxx = 0; errno = 25; goto lab9900; lab9190: lxx = lptr; errno = 107; goto lab9900; lab9200: lxx = lptr; errno = 112; lab9900: carerr(lxx, errno); return (result); lab9998: wrdtyp[1] = -1; lab9999: if ((askx == TELL && (adverb == WHERE || adverb == WHAT)) || (askx == ASK && (adverb != WHERE && adverb != WHAT))) goto lab9130; if (adverb == WHERE || adverb == WHAT) dotflg = 1; result = 1; return (result); } wscan() /* * this routine reads the input ascii code and scans for punctuation or * numbers and then converts the first 9 letters of a word to three integer*2 * words of radix 32 form */ { char m; static int pow32[] = {1, 32, 1024, 32768}; int plcpnt, wpnt, kchar; if (dotflg) { actor = 1; dotflg = 0; } plcpnt = 1; punct = 0; wpnt = 1; three[0] = 0; three[1] = 0; three[2] = 0; while (inbuf[lptr] == ' ') lptr++; /* * punct =1 is period, 2 is comma, 3 is number,4 is illegal character and * 5 means a number directly follows a word 6 means letter follows a * number */ if (inbuf[lptr] == '.' || inbuf[lptr] == '?') { dotflg = 1; punct = 1; lptr += 1; return (0); } if (inbuf[lptr] == ',') { punct = 2; lptr += 1; return (0); } while (inbuf[lptr] >= '0' && inbuf[lptr] <= '9') { /* number handling */ punct = 3; if (three[0] < 3200) three[0] = three[0] * 10 + inbuf[lptr] - '0'; lptr += 1; } if (punct == 3 && (inbuf[lptr] != '.' && inbuf[lptr] != ',' && inbuf[lptr] != '?' && inbuf[lptr] != ' ')) punct = 6; if (punct == 3 || punct == 6) return (0); do { if (!((inbuf[lptr] >= 'a' && inbuf[lptr] <= 'z') || (inbuf[lptr] >= 'A' && inbuf[lptr] <= 'Z'))) { lptr += 1; punct = 4; return (0); /* the actual letter packing is done here */ } kchar = inbuf[lptr]; if (kchar >= 'a' && kchar <= 'z') kchar -= ' '; if (wpnt < 4) three[wpnt - 1] = three[wpnt - 1] + (kchar - '@') * pow32[3 - plcpnt]; plcpnt += 1; if (plcpnt >= 4) { wpnt += 1; plcpnt = 1; } lptr += 1; m = inbuf[lptr]; if (m == ' ' || m == ',' || m == '.' || m == '?') { if (three[0] != 20741 || three[1] != 14336 || three[2] != 0) return (0); punct = 1; return (0); } } while (m < '0' || m > '9'); punct = 5; return (0); } find(m) int m; { /* * this routine searches a vocabulary to find a word. index, on output, * gives the position of the word in the list. synonyms do not increment * the counter, so index*3-2 is **not** the actual pointer to the word in * the list */ int i, t, k, type; for (i = 0; i < 5; i++) index[i] = 0; t = 0; indx = 0; for (i = 1; i <= m * 3 - 2; i += 3) { if (vocab[i] > 0) indx += 1; if (abs(vocab[i]) != three[0]) continue; if (vocab[i + 1] != three[1]) continue; if (vocab[i + 2] == three[2]) { t = indx; type = 1; for (k = 1; k <= 4; k++) if (indx >= typlst[k - 1]) type = type + 1; index[type - 1] = indx; } } indx = t; } lbit(arg, pow) int arg, pow; { return ((arg & (1 << pow)) != 0); } parse() { /* * subroutine parse this mess deciphers the various direct and indirect * (i.e. second, usually, but in 'give frog cup' the frog is the i.o.) * objects. it associates them with their respective adjectives (dobjs(i) * and doadjs(i) correspond) butflg is set if the "all but" construct is * encountered allflg is set if the "all" construct is enconntered the * d.o. and i.o prepositions are put in prepdo and prepio */ int result, wptr, thevrb, vrbind, vdo, vio, vobj, i; int frstaj, frstnn, errno, tprp; result = 0; thevrb = wrdnum[0]; vrbind = thevrb - VRBMIN + 1; vdo = 0; vio = 0; vobj = 0; if (thevrb < SHIT) { vdo = vrbpdo[vrbind]; vio = vrbpio[vrbind]; vobj = vrbobj[vrbind]; } butflg = 0; allflg = 0; numdo = 0; prepdo = 0; prepio = 0; iobj = 0; ioadj = 0; for (i = 0; i < 12; i++) { dobjs[i] = 0; doadjs[i] = 0; } /* this block is a test for "sit down" or "get up" or "look up" etc */ if (((lbit(vobj, 1) && wrdnum[1] == DOWN) || (lbit(vobj, 2) && wrdnum[1] == UP)) && wrdtyp[2] == -1) { prepdo = wrdnum[1]; result = 1; goto finalout; } /* yell allows anything after it */ if (thevrb == YELL) goto testout; wptr = 1; frstaj = 0; frstnn = 0; /* a preposition immediately follows verb */ if (wrdtyp[wptr] == 5) { prepdo = wrdnum[wptr]; if (prepdo == BUT) { errno = 21; goto errorout; } if (!lbit(vdo, (prepdo - PRPMIN))) { errno = 21; goto errorout; } wptr += 1; } /* * adjective follows verb *** special case of "terran" and "cygnan" as * nouns */ if (wrdtyp[wptr] == 3) { if ((wrdnum[wptr] == TERRAN || wrdnum[wptr] == CYGNAN) && wrdnum[0] == TRANSL) wrdtyp[wptr] = 4; else { frstaj = wrdnum[wptr]; doadjs[0] = frstaj; wptr += 1; } } /* this takes care of the case of a verb alone on a line */ if (wrdtyp[wptr] != 4) { if (wrdtyp[wptr] != -1) { errno = 28; goto errorout; } else { { if (thevrb >= SHIT) { result = 1; goto finalout; } if (!lbit(vobj, 7)) { result = 1; goto finalout; } } errno = 27; goto errorout; } } frstnn = wrdnum[wptr]; /* look at first set of objects (not always d.o.) */ dobjs[0] = frstnn; numdo += 1; if (numdo == 9) { errno = 25; goto errorout; } wptr += 1; /* the following takes care of multiple objects */ if (frstnn == ALL) { if (!lbit(vobj, 5)) { errno = 22; goto errorout; } if (frstaj != 0) { errno = 26; goto errorout; } allflg = 1; if (wrdnum[wptr] == BUT) { butflg = 1; /* check for adjective before noun */ if (!(wrdtyp[wptr + 1] == 4 || (wrdtyp[wptr + 1] == 3 && wrdtyp[wptr + 2] == 4))) { errno = 23; goto errorout; } wptr += 1; } } if (butflg || (wrdtyp[wptr] == -2)) { if (!lbit(vobj, 5)) { errno = 22; goto errorout; } mulobj(&wptr); if (numdo > 9) { errno = 25; goto errorout; } } /********** end multiple obj processor */ if (wrdtyp[wptr] == -1) goto testout; /* if the verb is "is" we may have a final adjective */ if (thevrb == IS && wrdtyp[wptr] == 3) { doadjs[1] = wrdnum[wptr]; if (wrdtyp[wptr + 1] == -1) goto testout; errno = 20; goto errorout; } /* * if the next word is a noun or adjective, and verb is not "is" we have * a non-prep indirect object such as the frog in "give frog water" */ if (wrdtyp[wptr] == 4 || (wrdtyp[wptr] == 3 && wrdtyp[wptr + 1] == 4)) { if (numdo > 1 || prepdo != 0) { errno = 22; goto errorout; } if (!lbit(vobj, 3)) { errno = 24; goto errorout; } prepio = TO; ioadj = frstaj; iobj = frstnn; doadjs[0] = 0; if (wrdtyp[wptr] == 3) { doadjs[0] = wrdnum[wptr]; wptr += 1; } dobjs[0] = wrdnum[wptr]; numdo = 1; wptr += 1; /****** repeat the multiple obj processor */ if (dobjs[0] == ALL) { if (!lbit(vobj, 5)) { errno = 22; goto errorout; } if (doadjs[0] != 0) { errno = 26; goto errorout; } allflg = 1; if (wrdtyp[wptr] == 5 && wrdnum[wptr] == BUT) { butflg = 1; if (!(wrdtyp[wptr + 1] == 4 || (wrdtyp[wptr + 1] == 3 && wrdtyp[wptr + 2] == 4))) { errno = 23; goto errorout; } } } if (butflg || wrdtyp[wptr] == -2) { if (!lbit(vobj, 5)) { errno = 22; goto errorout; } mulobj(&wptr); if (numdo > 9) { errno = 25; goto errorout; } } /***** end multiple object processor */ if (wrdtyp[wptr] != -1) { errno = 20; goto errorout; } goto testout; } /* the only thing left that is legal is a perpositional construct */ if (wrdtyp[wptr] != 5 || wrdnum[wptr] == BUT || ( wrdtyp[wptr + 1] == 5 && wrdnum[wptr + 1] == BUT)) { errno = 20; goto errorout; } tprp = wrdnum[wptr]; wptr += 1; /* * check for end of line or two preps in a row (e.g. fill the bottle up * with water) */ if (wrdtyp[wptr] == -1 || wrdtyp[wptr] == 5) { if (prepdo != 0 || (!lbit(vdo, (tprp - PRPMIN))) || (!lbit(vobj, 0))) { errno = 20; goto errorout; } prepdo = tprp; if (wrdtyp[wptr] == -1) goto testout; wptr += 1; } if (!lbit(vio, (wrdnum[wptr - 1] - PRPMIN))) { errno = 20; goto errorout; } prepio = wrdnum[wptr - 1]; if (wrdtyp[wptr] == 3) { ioadj = wrdnum[wptr]; wptr += 1; } if (wrdtyp[wptr] != 4) { errno = 20; goto errorout; } iobj = wrdnum[wptr]; wptr += 1; if (wrdtyp[wptr] != -1) { errno = 20; goto errorout; } testout: if ((dobjs[0] == 0 && lbit(vobj, 7)) || (iobj == 0 && lbit(vobj, 6))) { errno = 20; goto errorout; } if (!lbit(vobj, 4) && dobjs[0] != 0 && prepdo == 0) { errno = 19; goto errorout; } result = 1; finalout: if (wrdnum[0] == AGAIN) { for (i = 0; i < 12; i++) { doadjs[i] = zadjs[i]; dobjs[i] = zobjs[i]; } ioadj = ziadj; iobj = ziobj; prepdo = zpdo; prepio = zpio; actor = zactor; adverb = zadvrb; wrdnum[0] = zverb; numdo = znumb; allflg = zall; butflg = zbut; } else { for (i = 0; i < 12; i++) { zadjs[i] = doadjs[i]; zobjs[i] = dobjs[i]; } ziadj = ioadj; ziobj = iobj; zpdo = prepdo; zpio = prepio; zactor = actor; zadvrb = adverb; zverb = wrdnum[0]; zall = allflg; zbut = butflg; } return (result); errorout: carerr(0, errno); return (result); } mulobj(wptr) int *wptr; { /**** multiple opject subroutine from "parse" */ while (1) { if (wrdtyp[*wptr] == 3) { doadjs[numdo] = wrdnum[*wptr]; *wptr += 1; } if (wrdtyp[*wptr] == 4) { numdo += 1; if (numdo > 10) return (1); dobjs[numdo - 1] = wrdnum[*wptr]; *wptr += 1; if (wrdtyp[*wptr] != -2) return (1); } *wptr += 1; } } SHAR_EOF cat << \SHAR_EOF > vtext.dat.ac 2001 Steep trail 2002 Near top of the pass 2003 Top of the pass 2004 Branch in the trail 2005 East shore of the lake 2006 Gravel beach 2007 Forest 2008 Forest 2009 Forest 2010 Forest 2011 Forest 2012 Base of the spire 2013 Halfway up the spire 2014 Top of the spire 2015 Sandy beach 2016 Swimming at the coral beds 2017 North end of the lake 2018 Vein of minerals 2019 Southwest of a chasm 2020 Step-like rock strata 2021 Northeast of the chasm 2022 Bottom of a chasm 2023 Fern-filled ravine 2024 Beautiful waterfall 2025 Behind some horsetails 2026 Southwest of the Mars-like area 2027 Red rocks 2028 Red hill 2029 West of a deep bowl 2030 North of a small building 2031 Southwest of a deep bowl 2032 Southwest lip of the bowl 2033 South lip of the bowl 2034 Southeast lip of the bowl 2035 Northeast lip of the bowl 2036 North lip of the bowl 2037 Northwest lip of the bowl 2038 Center of the bowl 2039 South to west trail 2040 Dump 2041 Door leading into the ground 2042 Inside a small building 2043 West edge of town 2044 East edge of town 2045 South of town 2046 North-southwest trail 2047 South of a large building 2048 Bottom of a tower 2049 Top of the tower 2050 South of the Mars-jungle boundary 2051 Inside large Martian building 2052 Center of a ledge 2053 East end of the ledge 2054 West end of the ledge 2055 Precarious position 2056 Under an overhang 2057 West end of a ravine 2058 Northwest-southeast ridge 2059 Northeast-southwest path 2060 Leaf covered clearing 2061 Stone monument 2062 Forest, jungle, and green-air junction 2063 Open field 2064 Muddy jungle 2065 Jungle with rubbery trees 2066 Up a rubber tree 2067 Jungle path 2068 West of greenhouse 2069 Antenna site 2070 Greenhouse north 2071 Greenhouse center 2072 Greenhouse south 2073 Vegetable garden 2074 Fruit garden 2075 Top of spiral ramp 2076 Center of aviary roof 2077 Half way up ramp 2078 Aviary entrance 2079 Aviary center 2080 Half way up pole 2081 East of greenhouse 2082 Cacti 2083 Staircase top 2084 Staircase middle 2085 Staircase bottom 2086 Field of flowers 2087 Beehives 2088 Toolshed 2089 West of barrier 2090 (90 to 95 are never reached) 2091 2092 2093 2094 2095 2096 Bottomless pit 2097 Bottom of pit 2098 Back of cave 2099 Sculptors' studio 2100 Artist's cavern 2101 Maze 2102 Maze 2103 Maze 2104 Maze 2105 Maze 2106 Maze 2107 Maze 2108 Maze 2109 Maze 2110 Maze 2111 Maze 2112 Maze 2113 Maze 2114 Maze 2115 Maze 2116 Maze 2117 Dark tunnel 2118 Mushroom farm 2119 Round tunnel 2120 Curving passage 2121 Wet cave 2122 Underground pool 2123 Underwater 2124 Dead end 2125 Dead end 2126 Tight squeeze 2127 Dead end 2128 Gold mine 2129 Damp crawlway 2130 Large hall 2131 Ferret home 2132 Ferret nursery 2133 East-west hall 2134 Metal chamber 2135 East end of hall 2136 North end of hall 2137 Hall 2138 Hall 2139 Hall junction 2140 Hall 2141 Hall 2142 South end of hall 2143 Darkroom 2144 Library 2145 Office 2146 Control room 2147 Chemical storage 2148 Electronic storage 2149 Storage room 2150 Tool room 2151 Mine Entrance 2152 Top of mine shaft 2153 Teleportation booth 2154 Center of great hall 2155 North wall of hall 2156 Northeast corner of hall 2157 East wall of hall 2158 Southeast corner of hall 2159 South wall of hall 2160 Southwest corner of hall 2161 West wall of hall 2162 Northwest corner of hall 2163 Hallway 2164 Hallway 2165 Large anteroom 2166 Giant ship 2167 Hallway 2168 Viewing room 2169 Outer office 2170 Secret corridor 2171 Office complex 2172 Hallway 2173 Airlock door 2174 Airlock 2175 Small ship in dock 2176 Orbiting Altair 2177 Orbiting Cygnus 2178 Orbiting Vega 2179 Orbiting Deneb 2180 Orbiting Auriga 2181 In ship on Cygnus 2182 Cygnan landing site 2183 Cygnan sea-shore 2184 In ship on Auriga 2185 Aurigan landing site 2186 Aurigan control center 2187 In ship on Deneb 2188 Deneb landing platform 2189 Doorway 2190 Sitting room 3001 Chrome key 4001 Dangling from the nest on a red string is a chrome key. 4002 There is a chrome key on a string here. 3002 Blue sapphire 4001 At the end of one vein is a huge blue sapphire! 4002 There is a huge blue sapphire here. 3003 Colorful fish 4001 Swimming blissfully around, eating the tiny polyps, is a large 4001 particularly colorful fish. 4002 There is a colorful fish here. 4003 It is a very colorful fish indeed, with long fins and a long 4003 snout, suitable for eating the tiny polyps. The zoologists at 4003 your camp might like to examine it. 3004 Dead fish 4001 There is a smelly dead fish here. 4002 It is now dead and beginning to decompose. You shouldn't have 4002 kept it out of the water so long. 3005 Knapsack 4001 There is a knapsack here. 4002 It is a large red canvas backpack, with lots of room and many 4002 pockets. You could easily carry many kilograms in it. 4003 The knapsack is empty. 4004 The knapsack contains: 3006 Red shirt 4001 Lying on the ground is a red shirt. 3007 Green shirt 4001 There is a dark green shirt here. 3008 Pair of heavy boots 4001 There is a pair of heavy boots here. 4002 They are for heavy duty hiking. 3009 Canvas shoes 4001 There is a pair of light canvas shoes here. 4002 They are for rock climbing. 3010 Blue pants 4001 Lying on the ground is a pair of dark blue pants. 3011 Tan pants 4001 There is a pair of light tan pants here. 3012 Butterfly net 4001 There is a butterfly net here. 4002 The net is empty. 4003 The net contains: 3013 Plastic tube 4001 There is something which looks like a tube of toothpaste here. 4002 The label says: "Berry's Bug Dope" 4002 Repels blackflies, bees, gnats and chiggers. Not for use 4002 against worms or sharks. Ingredients: DEET (C12H17NO) 4002 23%, active ingredient. Inert ingredients: 4002 Alcohol (C2H6O) 76%, perfume 1%. 4002 The tube is empty. 3014 Instant camera 4001 There is an instant-picture camera here. 4002 It is a space-patrol issue picture-in-a-minute camera, model 4002 AN/MQ 30045-9812-773R. It's so automatic that all you have to do 4002 is say "shoot" and it will take a picture of the most 4002 interesting object around. This little beauty cost the Patrol 4002 $6,345,003.00. 4002 (Just between you and me, it's a Polaroid Snapshooter 4002 worth $49.95.) 3015 Plastic bag 4001 There is a plastic bag here. 4002 It is a collecting bag, for preserving living specimens. It is 4002 watertight but can "breathe" so living animals can be carried 4002 in it. 4003 The plastic bag is empty. 4004 The plastic bag contains: 4005 The bag is full of water. 4006 The water-filled bag contains: 3016 Crablike fossil 4001 Sticking out of the rocks is a huge crablike fossil! 4002 There is a large fossil here. 3017 Photograph of tiny pterodactyls 4001 There is a photograph of some tiny pterodactyls here. 4002 There's nothing particularly interesting about the small 4002 critters themselves (except to see how sharp their teeth are), 4002 but, behind the horsetails seems to be a cave! 3018 Photograph of Martians 4001 There is a photograph of some "Martians" here. 4002 It's a photo of those odd energy creatures. The scene is what 4002 must be a bar. One of them is getting a "charge" from an odd 4002 electrical device. 4003 The photo is of those odd electrical "Martians" playing their 4003 variant of hockey. 3019 Huge diamond 4001 One of the diamonds is loose. 4002 There is a huge diamond here. 3020 Hockey puck 4001 Lying on the ground is a hockey puck. 4002 It look like an ordinary hockey puck, about 10 centimeters in 4002 diameter. Hmmmmmmmmmmm... It seems, however, to be metallic 4002 rather than the usual plastic. It is bright and silvery. 4002 Closer scrutiny shows that it is SOLID PLATINUM! 3021 Red boulder 4001 Lying on the ground is barely liftable boulder. 3022 Green moss 4001 Lying on the ground is a large piece of soft green moss. 4002 Moss is moss is moss. It's a beautiful dark green and very 4002 soft and squishy. 3023 Glass plate 4001 A large piece of glass is lying on the ground. 4002 It's a plate of glass, about 80 centimeters in diameter, and one 4002 centimeter thick, apparently cut out of a larger piece by some 4002 inept glasscutter. It's very sturdy. 3024 Piece of wire 4001 Lying on the ground is a long piece of wire. 4002 It's very heavily insulated, except for the very ends, 4002 which are stripped clean. 4003 The wire is attached to the tower. 4004 The wire is tied to the knob in the stool. 3025 Glowing sphere 4001 Lying on the ground is a glowing sphere. 4002 The sphere is about ten centimeters in diameter. It is hollow, 4002 with rather thick walls. Inside is a smaller sphere, about one 4002 centimeter in diameter. The glow seems to emanate from the 4002 whole inner wall it, but is brighter near where the small sphere 4002 rests. It is extremely heavy for its size. 3026 Gooey latex 4001 Flowing from the bark of the tree is a large quantity of gooey 4001 latex. It flows down the tree making a rubbery coating. If you 4001 had a bucket you could collect a large quantity. 4002 There is a puddle of congealed latex here. 4003 A sticky layer of rubber covers the pole. 4004 It is a mildly viscous, very sticky liquid, with a faint 4004 turpentine-like odor. If spread in a thin layer on something 4004 it soon congeals into a smooth, pliable, and only faintly sticky 4004 coating. 4005 It seems to have congealed into a solid mass. 3027 Damaged cable 4001 There is a damaged microwave cable here. 4002 It is a green cable about one meter long with connectors on each 4002 end. The middle has been chewed almost through by a rodent. 3028 Good cable 4001 There is a good microwave cable here. 4002 It is a green cable about one meter long with connectors on 4002 each end. It is in good condition. 3029 Beautiful orchid 4001 Sitting on the bench is a potted orchid. 4002 There is a beautiful orchid here. 4003 It is violet, white and magenta, about 20 cm across, and a 4003 striking example of the evolutionary similarity of this planet 4003 and the earth. 3030 Venus flytrap 4001 Sitting on the bench is a potted Venus flytrap plant. 4002 There is a Venus flytrap here. 4003 It is green and nasty. It is obviously carnivorous, although 4003 the resemblance to it's earthly namesake is tenuous. 3031 Large cassette 4001 Lying on the ground is a large cassette for film. 4002 It is about 30 centimeters square and 1 cm thick. An indicator 4002 shows that it is properly loaded with film. 3032 Overexposed photograph 4001 There is an overexposed photograph here. 4002 Something, probably radioactive, has caused this photo to be 4002 so overexposed as to be unusable. 3033 Tomato 4001 There is a tomato here. 4002 It looks like a delicious red tomato. 3034 Lettuce 4001 There is a head of lettuce here. 4002 Lettuce is lettuce. It is not very nutritious. 3035 Cabbage 4001 There is a head of cabbage here. 4002 Cabbage is cabbage. 3036 Strawberry 4001 There is a giant strawberry here. 4002 It is 10 centimeters across and red, like a strawberry. 3037 Grapes 4001 A large bunch of grapes grows on a vine here. 4002 The is a bunch of grapes here. 4003 They are green and look good enough to eat. 3038 Sunflower seed 4001 Growing on one of the plants is a full-grown seed. 4002 There is a large sunflower seed here. 4003 It is a black seed with a metallic sheen, about 10 cm across. 4003 It is shaped like a large peach pit, with deep grooves in the 4003 sides. 3039 Bucket 4001 There is a bucket here. 4002 The bucket is full of water. 4003 The bucket is empty 4004 The bucket contains: 3040 Pitchfork 4001 There is a pitchfork here. 3041 Shovel 4001 There is a shovel here. 3042 Robot 4001 There is a robot here. 4002 There is a slightly corroded robot here. 4003 The robot is about one and a half meters tall. It is almost 4003 spherical, sitting on four lightly sprung wheels. On top is 4003 what looks like a car antenna. Beneath that is a rotating TV 4003 camera. It has two arms, one of which is a rather delicate- 4003 looking clasping device. The other is a swivel-mounted hose 4003 arrangement obviously designed for it's primary purpose of 4003 watering plants. In the control section beneath the TV eye are 4003 a microphone and a speaker. 4004 The robot is empty-handed. 4005 The robot holds: 3043 Statue 4001 There is a small statue here 4002 It is a carving of a ferret. The ferret is holding a small star. 4002 It must be some sort of religious object. 3044 Mushroom 4001 There is a huge mushroom here. 3045 Gold nugget 4001 Lying on the ground is a large nugget of gold. 3046 Photograph of wall paintings. 4001 There is a photograph of some wall paintings here. 4002 You recognize the paintings made be the ferret-artist. 3047 Photograph of ferret family 4001 There is a photo of some ferrets here. 4002 It is a typical boring family photo, not some artistic wonder. 4002 What more did you expect? 3048 Black cat 4001 Sitting on the platform is a very unhappy black cat. 4002 There is a large black cat purring contentedly here. 3049 Container of DEET 4001 There is a supply of DEET here. 4002 It is a slightly viscous, colorless, slightly sweet liquid. 3050 Container of nvglo 4001 There is a supply of nvglo here. 4002 It is a pale pink powder. It's dust makes you sneeze. 3051 Container of sbkl 4001 There is a supply of sbkl here. 4002 It consists of large white crystals. 3052 "Terran" cartridge 4001 There is a plug-in cartridge marked "Gviizm-Terran" here. 4002 It looks like it would plug into a computer. 3053 Knife 4001 There is a knife here. 3054 Hammer 4001 There is a hammer here. 3055 Screwdriver 4001 There is a screwdriver here. 3056 "Cygnan" cartridge 4001 There is a plug-in cartridge marked "Xbtmzm-Cygnan" here. 4002 It looks like it would plug into a computer. 3057 Glowing bead 4001 There is a glowing glass bead here. 4002 It is about a centimeter in diameter, glowing brightly 4002 and quite hot. 3058 Silicon "Insect" 4001 Basking in the heat of the fire is a tiny silicon insect. 4002 There is a tiny silicon insect here. 4003 It looks like a small metallic grasshopper. The body is made 4003 of a gray semi-metallic substance which looks like silicon. 4003 The wings are a transparent red, as if made of some zinc or 4003 arsenic mineral. The eyes are bright iridescent blue-green. 4003 The thing is obviously a bit cold away from the fiery pit, 4003 but not in severe distress. The whole effect is as if some piece 4003 of precious jewelry had come to life. 3059 Piece of Xray film 4001 There is a piece of used xray film here. 4002 The xray film contains no useful image. 4003 The xray film, though not well exposed, contains the image of a 4004 The xray film, though showing an image, is all jumbled up and 4004 unusable. 4005 The xray film appears to have been improperly processed. 4005 Perhaps you didn't get the chemicals in the proper places. 3060 Magnesium box 4001 There is a magnesium box here. 4002 It is a medium sized lock-box. The lock mechanism consists of 4002 a left dial and a right dial, each of which reads from 0 to 999. 4003 The box is empty. 4004 The box contains: 3061 Good disc 4001 There is a good silicon disc here. 4002 It is a round piece of silicon, with gold contact pads around 4002 the edge. It might be some sort of computer memory chip. 4002 However, due to the presence of some sort of plastic coating 4002 appearing in places on it, it clearly is not fully processed. 3062 Broken disc 4001 There is a broken silicon disc here. 4002 It is a round piece of silicon, with gold contact pads around 4002 the edge. It might be some sort of computer memory chip. 4002 It looks ready to use, except that a small piece is broken 4002 off of one corner. 3063 Violet crystal 4001 Lying on the ground is a beautiful large violet crystal. 4002 It is a large crystal, very light for its size, with a pale 4002 violet hue. It is probably spodumene, a mineral valuable for 4002 its content of lithium, which is used in your ship's drive. 3064 Chocolate egg 4001 Sitting in the doll house is a chocolate egg. 4002 There is a chocolate egg here. 3065 Silver coin 4001 There is a silver coin here. 4002 The coin has a likeness of a reptile on one side and the 4002 notation &100 on the other. 3066 Brass coin 4001 There is a brass coin here. 4002 It is marked &50. 3067 Nickel coin 4001 There is a nickel coin here. 4002 It is marked &25. 3068 Copper coin 4001 There is a copper coin here. 4002 It is marked &75. 3069 Platinum coin 4001 There is a platinum coin here. 4002 It is marked &300. 3070 Map 4001 There is a map here. 4002 The map is a star map, showing the coordinates of the stars in 4002 the vicinity. Some stars are described in script which you 4002 cannot read. 4003 This appears to be a souvenir map of the galaxy. Among prominent 4003 locations are the following: 4003 Location Right ascension Declination 4003 Altair 0556 2331 4003 Cygnus 2445 4293 4003 Vega 7552 2204 4003 Deneb 1105 6339 4003 Auriga 3111 3325 3071 Red ball 4001 There is a small red ball here. 3072 Newspaper 4001 There is a newspaper here. 4002 The writing is unintelligible. 4003 A banner at the top of the paper says "EXTRA". 4003 A subtitle says "Teleporter to Test Site #6 Reactivated". 4003 The gist of the article is that the teleportation link to 4003 the planet known as Test Site #6, which recently failed, 4003 causing district administrator Glathryx to arrive at the 4003 space station minus his third and fourth leg sets, and then 4003 became totally inoperative, has come back in operation. 4003 It seems that an intruder into the test site is suspected 4003 of causing these recent events. All persons are requested 4003 to be on the lookout for at strange alien, whose description 4003 more or less fits you. 3073 Yellow rod 4001 There is a yellow rod here. 3074 Written note 4001 There is a piece of paper with a note on it here. 4002 The note is unintelligible. 4003 The note is partly obliterated by coffee stains, but you can 4003 just make out 4003 Do it twice 4003 Door combinations .... 4003 Small ship 99 ?? ?? 5001 Volcanic spire 4001 %%%% 4002 The spire, although steep, has many small rock flakes 4002 on which a person could stand if he had the right kind of shoes. 4003 Why not try to take a mountain. It's just as easy. 5002 Tiny pterodactyls 4001 They are rather cute but nasty creatures, with greenish-gray 4001 skin, venomous red eyes and long razorlike tails. 4002 That's not wise. They are vicious creatures and would bite you 4002 The bite of most animals here is fatal. 5003 Ceramic stool 4001 As you reach over to look at the stool, a spark jumps out from 4001 the knob in the center and shocks you. 4002 It's too heavy to lift. 5004 Metal knob 4001 As you get near the knob it gives you a painful but harmless 4001 electrical shock. 4002 The knob is permanently attached to its base, which is attached 4002 forever to the ground. 5005 Round window 4001 The window is about 1 meter in diameter, with plate glass. 4002 The window in the building seems to have been vandalized. 4003 The glass is quite permanently set in its frame. 5006 Round door 4001 In the front of the building is a round door which is closed. 4002 In the front of the building is a round door which is open. 4003 In the center of the door is a small metal dimple. 4004 It is attached to unreachable and unbreakable hinges. 5007 Tower 4001 4002 Have you eaten a hallucinogenic drug? 5008 Metal dimple 4001 4002 Silly! 5009 Stone cube 4001 The inscription on the monument reads: 4001 (translated into English) 4001 4001 Site of first landing party 4001 Year 21007 4001 4002 If you wish me to give you a hernia, please say so directly. 5010 Horsetails 4001 Horsetails are primitive plants, which live today on earth 4001 in wet cool forests. Today they are rather small, but 4001 millions of years ago there were ones several meters tall. 4001 On this planet the large ones are still common. Here they 4001 form a line to the sides of the waterfall, where the spray 4001 keeps them wet. The pterodactyls seem to live somewhere 4001 behind them. 4002 Horsetails are used only to scour pans, which you don't have. 5011 Metal door 4001 The door is closed. 4002 The door is open. 4003 Why would you wish to carry that around? 5012 Glass door 4001 The door is closed. 4002 The door is open. 4003 You can't take that. It's to big to get anywhere. 5013 Rabbit hole 4001 In the ground is a small hole, probably the entrance to a 4001 rabbit warren. 4002 In the ground is the gaping entrance of a bottomless pit. 4003 A hole is the absence of something. You can't take air. 5014 Louver 4001 Someone has ransacked the louver. A gaping hole remains. 4002 Why bother? 5015 Grape vines 4001 Growing here in great profusion are grape vines. 4002 There are some shriveled-up grape vines here. 4003 Useless. Useless. 5016 Slot 4001 The slot is empty. 4002 The slot contains: 4003 How can you take that, stupid? 5017 Square button 4001 Silly! 5018 Square button 4001 Not bloody likely. 5019 Round button 4001 Not until you reach Nirvana. 5020 Hexagonal button 4001 You take the little plastic cover off the button, but 4001 the underlying mechanism still works. 5021 Video screen 4001 The video screen is blank. 4002 The video screen shows the view taken by the robot's camera. 4003 It is permanently mounted on the wall. 5022 Sink 4001 The sink is empty. 4002 The sink contains: 5023 Microwave antenna 4001 The antenna is an ordinary satellite dish. It is 5 meters in 4001 diameter, white, and has a horn collector attached to the base 4001 by a cable. The cable seems to have been damaged. 4002 The antenna is an ordinary satellite dish. It is 5 meters in 4002 diameter, white, and has a horn collector attached to the base 4002 by a cable. The cable is in working order. 4003 The antenna is an ordinary satellite dish. The feed cable is 4003 missing. 4004 It weighs 4 tons! 5024 Enlarger 4001 Nothing is sitting on the enlarger base 4002 Sitting on the enlarger is: 4003 It is bolted to the wall. 5025 Rack 4001 It has vertical partitions suitable for holding things like film 4001 cassettes in a vertical position. 4002 The rack is empty. 4003 The rack contains: 4004 It is attached to the bench. 5026 Tray. 4001 The tray is empty. 4002 The tray contains: 4003 It is a molded part of the bench. 5027 Hopper 4001 The hopper is empty. 4002 The hopper contains: 4003 It can't me moved. 5028 Left funnel 4001 Silly! 5029 Middle funnel 4001 You must be suffering from a mind-scrambling drug. 5030 Right funnel 4001 That's useless. 5031 Red button 4001 It's part of a machine which is too heavy to move. 5032 Desk 4001 The desk is empty. 4002 The desk contains: 4003 It's too heavy to carry. 5033 Level indicator 4001 The level indicator shows too little water. 4002 The water level is just about right. 4003 Don't kid me! 5034 Red light 4001 The red light is on. 4002 The red light is off. 4003 The red light comes off in your hand. (Sorry, just kidding.) 5035 Green light 4001 The green light is off. 4002 The green light is on. 4003 You're getting tiring, trying to take immovable objects. 5036 Acid flow 4001 There is nothing sitting in the acid. 4002 Sitting in the acid is: 4003 The robot can't bend over far enough. 5037 Fiery pit 4001 Silly! 5038 Sulfurous mud 4001 The robot can't bend over to reach it. 5039 Violet button 4001 You can't take it. 5040 Orange button 4002 It is fixed in the wall. 5041 White button 4001 You remove it. A large Jack-in-the-box jumps out. You are so 4001 embarrassed that you carefully put the whole affair back. 5042 Blue button 4001 As you unscrew it, you notice that your nose falls off also. 4001 The switch it operated remains operational. 5043 Round recess 4001 The recess is empty. 4002 The recess contains: 4003 Take the air! 5044 Red vapor 4001 There is nothing near the red vapor. 4002 Surrounded by the red vapor is: 4003 The robot has no suitable container. 5045 Green vapor 4001 There is nothing in the green vapor. 4002 Sitting in the green vapor is: 4003 The robot has no suitable container. 5046 Frogs 4001 These are quite ordinary frogs. They are green, a bit slimy, and 4001 make a hollow krrooooookkking sound. If you could converse with 4001 them (which you can't), you would discover that their favorite 4001 topic of conversation is sex. 4002 Taken. ....... but 4002 After a few moments the frog emits a foul-smelling slimy liquid 4002 which runs down your arm and begins to itch. You drop the poor 4002 creature. 5047 Red birds 4001 They seem to be parrots. 4002 They fly amongst the highest branches of the trees, far above 4002 your reach. 5048 Beautiful birds 4001 There are dozens of birds of all colors and sizes here. They 4001 seem to like the most inaccessible branches of the small trees. 4002 They are well above your head. You can't climb the trees, as 4002 their trunks are much too weak. 5049 Beautiful birds 4001 There are several different species: big red ones, little green 4001 ones, ones with violet backs and white and yellow heads, and 4001 many others. They seems to like the highest branches of the 4001 trees. 4002 The birds are on the trees, not on the walkway where you stand. 5050 Beautiful birds. 4001 The birds are hidden by the top branches of the trees. 4002 They aren't nearby; they are out of reach in the trees. 5051 Bees 4001 Any attempt to get close to the bees results in your getting 4001 painful stings. 5052 Cactus 4001 They are much too big and prickly. 5053 Doll house 4001 It is large and ornate, about 2 meters tall, with four stories. 4001 There are the usual windows and doors through which the ferret 4001 children put their dolls. 4002 It is too big to get out the door. 5054 Waterfall 4001 Sorry, there is no pot of gold at the end of the rainbow. There 4001 isn't even any rainbow, just lots of water. 4002 Have you perhaps been eating cactus hallucinogenic drugs? 5055 Vending machine 4001 There is a vending machine here. 4002 It looks exactly like the machines used on earth to dispense 4002 candy. The contents look like red balls about one centimeter 4002 in diameter. The label says "Ozmtfztv Krooh". It has a slot 4002 labeled &300. 4003 It looks exactly like the machines used on earth to dispense 4003 candy. The contents look like red balls about one centimeter 4003 in diameter. The label says "Language Pills". It has a slot 4003 labeled &300. 4004 It is fastened to the wall. 5056 Slot 4001 Fat chance. 5057 Vending machine 4001 There is a vending machine here. 4002 It looks exactly like the machines used on earth to dispense 4002 newspapers. Inside is a supply of papers. The money slot is 4002 labeled &25. 4003 It is fastened to the wall. 5058 Slot 4001 Fat chance. 5059 Vending machine 4001 There is a vending machine here. 4002 It is a slot machine. That is, it has a slot for any size 4002 coin and three windows through which can be seen images of 4002 various fruits and occasionally a pot of money. It does 4002 seem to be missing the lever necessary to make it a 4002 "One armed bandit". 4003 You think perhaps to take it to a quiet place and blow it 4003 open? Sorry, it won't budge. 5060 Slot 4001 Fat chance 5061 Vending machine 4001 There is a vending machine here. 4002 It appears to be offering maps for sale. A slot in it is 4002 marked &75. 4003 It is attached to the wall. 5062 Slot 4001 Fat chance. 5063 Large machine 4001 Read the room description for information. 4002 It is too heavy 5064 Orange door 4001 The orange door is shut. 4002 The orange door is open. 4003 Silly! 5065 Pink door 4001 The pink door is shut. 4002 Fat chance! 5066 Blue door 4001 The blue door is shut. 4002 The blue door is open. 4003 It's fixed top the ship. 5067 Orange clip 4001 The orange clip is empty. 4002 The orange clip contains: 4003 No way. 5068 Violet clip 4001 The violet clip is empty. 4002 The violet clip holds: 4003 Silly! 5069 Yellow clip 4001 The yellow clip is empty. 4002 The yellow clip contains: 4003 Not in this life! 5070 Blue clip 4001 The blue clip is empty. 4002 The blue clip holds: 4003 You break your fingernail but not the clip. 5071 File cabinet 4001 The file cabinet holds useless papers. 4002 In addition to junk the cabinet holds: 4003 It is glued to the floor. 5072 Green button 4001 Behind the file cabinets is a green button. 4002 Silly! 5073 Large mural 4001 The south wall of the room is completely filled with a large 4001 mural. 4002 The mural has slid partially aside to reveal a secret passage 4002 leading south. 4003 The mural shows a picture of one of the large star clusters 4003 visible out the viewing ports. You notice that the left side 4003 is somewhat scuffed up. 4004 You might as well take the air. 5074 Dummy 4001 **** 5075 **** 9999 SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.