+ switch(part)
+ {
+ case intransitive:
+ if (WD2 > 0 && verb != SAY) return(2800);
+ if (verb == SAY)obj=WD2;
+ if (obj == 0) {
+ /* Analyse an intransitive verb (ie, no object given yet). */
+ switch (verb-1) {
+ case 0: /* CARRY */ return carry(verb, INTRANSITIVE);
+ case 1: /* DROP */ return GO_UNKNOWN;
+ case 2: /* SAY */ return GO_UNKNOWN;
+ case 3: /* UNLOC */ return lock(verb, INTRANSITIVE);
+ case 4: /* NOTHI */ {RSPEAK(54); return(GO_CLEAROBJ);}
+ case 5: /* LOCK */ return lock(verb, INTRANSITIVE);
+ case 6: /* LIGHT */ return light(verb, INTRANSITIVE);
+ case 7: /* EXTIN */ return extinguish(verb, INTRANSITIVE);
+ case 8: /* WAVE */ return GO_UNKNOWN;
+ case 9: /* CALM */ return GO_UNKNOWN;
+ case 10: /* WALK */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 11: /* ATTAC */ return attack(input, verb, obj);
+ case 12: /* POUR */ return pour(verb, obj);
+ case 13: /* EAT */ return eat(verb, INTRANSITIVE);
+ case 14: /* DRINK */ return drink(verb, obj);
+ case 15: /* RUB */ return GO_UNKNOWN;
+ case 16: /* TOSS */ return GO_UNKNOWN;
+ case 17: /* QUIT */ return quit(input);
+ case 18: /* FIND */ return GO_UNKNOWN;
+ case 19: /* INVEN */ return inven(obj);
+ case 20: /* FEED */ return GO_UNKNOWN;
+ case 21: /* FILL */ return fill(verb, obj);
+ case 22: /* BLAST */ return blast();
+ case 23: /* SCOR */ return vscore();
+ case 24: /* FOO */ return bigwords(WD1);
+ case 25: /* BRIEF */ return brief();
+ case 26: /* READ */ return read(input, verb, INTRANSITIVE);
+ case 27: /* BREAK */ return GO_UNKNOWN;
+ case 28: /* WAKE */ return GO_UNKNOWN;
+ case 29: /* SUSP */ return saveresume(input, false);
+ case 30: /* RESU */ return saveresume(input, true);
+ case 31: /* FLY */ return fly(verb, INTRANSITIVE);
+ case 32: /* LISTE */ return listen();
+ case 33: /* ZZZZ */ return reservoir();
+ }
+ BUG(23);
+ }
+ /* FALLTHRU */
+ case transitive:
+ /* Analyse a transitive verb. */
+ switch (verb-1) {
+ case 0: /* CARRY */ return carry(verb, obj);
+ case 1: /* DROP */ return discard(verb, obj, false);
+ case 2: /* SAY */ return say();
+ case 3: /* UNLOC */ return lock(verb, obj);
+ case 4: /* NOTHI */ {RSPEAK(54); return(GO_CLEAROBJ);}
+ case 5: /* LOCK */ return lock(verb, obj);
+ case 6: /* LIGHT */ return light(verb, obj);
+ case 7: /* EXTI */ return extinguish(verb, obj);
+ case 8: /* WAVE */ return wave(verb, obj);
+ case 9: /* CALM */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 10: /* WALK */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 11: /* ATTAC */ return attack(input, verb, obj);
+ case 12: /* POUR */ return pour(verb, obj);
+ case 13: /* EAT */ return eat(verb, obj);
+ case 14: /* DRINK */ return drink(verb, obj);
+ case 15: /* RUB */ return rub(verb, obj);
+ case 16: /* TOSS */ return throw(input, verb, obj);
+ case 17: /* QUIT */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 18: /* FIND */ return find(verb, obj);
+ case 19: /* INVEN */ return find(verb, obj);
+ case 20: /* FEED */ return feed(verb, obj);
+ case 21: /* FILL */ return fill(verb, obj);
+ case 22: /* BLAST */ return blast();
+ case 23: /* SCOR */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 24: /* FOO */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 25: /* BRIEF */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 26: /* READ */ return read(input, verb, obj);
+ case 27: /* BREAK */ return vbreak(verb, obj);
+ case 28: /* WAKE */ return wake(verb, obj);
+ case 29: /* SUSP */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 30: /* RESU */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 31: /* FLY */ return fly(verb, obj);
+ case 32: /* LISTE */ {RSPEAK(spk); return GO_CLEAROBJ;}
+ case 33: /* ZZZZ */ return reservoir();
+ }
+ BUG(24);
+ case unknown:
+ /* Unknown verb, couldn't deduce object - might need hint */
+ SETPRM(1,WD1,WD1X);
+ RSPEAK(255);
+ return GO_CHECKHINT;
+ default:
+ BUG(99);