.FUNCT GO:ANY:0:0 ?FCN: GETB 0,33 >SCREENWIDTH LESS? SCREENWIDTH,64 \?CND1 PRINTI "[The screen is too narrow.]" CRLF QUIT ?CND1: CLEAR -1 ICALL1 INIT-STATUS-LINE ICALL1 V-VERSION ICALL1 INTRO ICALL1 MAIN-LOOP JUMP ?FCN .FUNCT INTRO:ANY:0:0 CRLF RTRUE .FUNCT PRINT-THE:ANY:1:1,OBJ EQUAL? OBJ,TURN \?CCL3 LESS? 1,P-NUMBER \?CCL3 PRINTC 32 PRINTN P-NUMBER PRINTI " minutes" RTRUE ?CCL3: EQUAL? OBJ,WINDOW \?CCL7 PRINTI " the window" RTRUE ?CCL7: ICALL2 THE?,OBJ PRINTC 32 PRINTD OBJ RTRUE .FUNCT THE?:ANY:1:1,OBJ FSET? OBJ,NARTICLEBIT /?CND1 IN? OBJ,ROOMS /?CTR4 FSET? OBJ,SEENBIT \?CCL5 ?CTR4: PRINTI " the" JUMP ?CND1 ?CCL5: FSET? OBJ,VOWELBIT \?CCL9 PRINTI " an" JUMP ?CND1 ?CCL9: PRINTI " a" ?CND1: FSET OBJ,SEENBIT RTRUE .FUNCT START-SENTENCE:ANY:1:1,OBJ ICALL2 THIS-IS-IT,OBJ EQUAL? OBJ,PLAYER \?CCL3 PRINTI "You" RTRUE ?CCL3: EQUAL? OBJ,HANDS \?CCL5 PRINTI "Your hand" RTRUE ?CCL5: EQUAL? OBJ,HEAD \?CCL7 PRINTI "Your head" RTRUE ?CCL7: EQUAL? OBJ,EYES \?CCL9 PRINTI "Your eyes" RTRUE ?CCL9: EQUAL? OBJ,TEETH \?CCL11 PRINTI "Your teeth" RTRUE ?CCL11: EQUAL? OBJ,EARS \?CND1 PRINTI "Your ears" RTRUE ?CND1: FSET? OBJ,NARTICLEBIT /?CND13 FSET? OBJ,SEENBIT \?CCL17 PRINTI "The " JUMP ?CND13 ?CCL17: FSET? OBJ,VOWELBIT \?CCL20 PRINTI "An " JUMP ?CND13 ?CCL20: PRINTI "A " ?CND13: FSET OBJ,SEENBIT PRINTD OBJ RTRUE .FUNCT PRINTA:ANY:1:1,O FSET? O,NARTICLEBIT /?CND1 FSET? O,VOWELBIT \?CCL6 PRINTI "an " JUMP ?CND1 ?CCL6: PRINTI "a " ?CND1: PRINTD O RTRUE .FUNCT THIS-IS-IT:ANY:1:1,OBJ EQUAL? OBJ,FALSE-VALUE,NOT-HERE-OBJECT,PLAYER /TRUE EQUAL? OBJ,INTDIR,GLOBAL-HERE,ROOMS /TRUE EQUAL? PRSA,V?WALK \?CND1 EQUAL? OBJ,PRSO /TRUE ?CND1: FSET? OBJ,PERSONBIT /?CCL11 FSET IT,TOUCHBIT SET 'P-IT-OBJECT,OBJ RTRUE ?CCL11: FSET? OBJ,FEMALEBIT \?CCL13 FSET HER,TOUCHBIT SET 'P-HER-OBJECT,OBJ RTRUE ?CCL13: FSET? OBJ,PLURALBIT \?CCL15 FSET THEM,TOUCHBIT SET 'P-THEM-OBJECT,OBJ RTRUE ?CCL15: FSET HIM,TOUCHBIT SET 'P-HIM-OBJECT,OBJ RTRUE .FUNCT NO-PRONOUN?:ANY:1:2,OBJ,CAP EQUAL? OBJ,PLAYER /FALSE FSET? OBJ,PERSONBIT /?CCL5 EQUAL? OBJ,P-IT-OBJECT \?CND1 FSET? IT,TOUCHBIT \?CND1 RFALSE ?CCL5: FSET? OBJ,FEMALEBIT \?CCL11 EQUAL? OBJ,P-HER-OBJECT \?CND1 FSET? HER,TOUCHBIT \?CND1 RFALSE ?CCL11: FSET? OBJ,PLURALBIT \?CCL17 EQUAL? OBJ,P-THEM-OBJECT \?CND1 FSET? THEM,TOUCHBIT \?CND1 RFALSE ?CCL17: EQUAL? OBJ,P-HIM-OBJECT \?CND1 FSET? HIM,TOUCHBIT /FALSE ?CND1: ZERO? CAP \?CCL28 ICALL2 PRINT-THE,OBJ JUMP ?CND26 ?CCL28: EQUAL? CAP,1,TRUE-VALUE \?CND26 ICALL2 START-SENTENCE,OBJ ?CND26: ICALL2 THIS-IS-IT,OBJ RTRUE .FUNCT HE-SHE-IT:ANY:1:3,OBJ,CAP,VERB CALL NO-PRONOUN?,OBJ,CAP ZERO? STACK \?CND1 FSET? OBJ,PERSONBIT /?CCL5 ZERO? CAP \?CCL8 PRINTI " it" JUMP ?CND1 ?CCL8: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "It" JUMP ?CND1 ?CCL5: EQUAL? OBJ,PLAYER \?CCL11 ZERO? CAP \?CCL14 PRINTI " you" JUMP ?CND1 ?CCL14: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "You" JUMP ?CND1 ?CCL11: FSET? OBJ,FEMALEBIT \?CCL17 ZERO? CAP \?CCL20 PRINTI " she" JUMP ?CND1 ?CCL20: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "She" JUMP ?CND1 ?CCL17: ZERO? CAP \?CCL24 PRINTI " he" JUMP ?CND1 ?CCL24: EQUAL? CAP,1,TRUE-VALUE \?CND1 PRINTI "He" ?CND1: ZERO? VERB /FALSE PRINTC 32 EQUAL? OBJ,PLAYER \?CCL31 EQUAL? VERB,STR?61 \?CCL35 PRINTI "are" RTRUE ?CCL35: EQUAL? VERB,STR?62 \?CCL37 PRINTI "have" RTRUE ?CCL37: EQUAL? VERB,STR?63 \?CCL39 PRINTI "try" RTRUE ?CCL39: EQUAL? VERB,STR?64 \?CCL41 PRINTI "empty" RTRUE ?CCL41: PRINT VERB RTRUE ?CCL31: PRINT VERB EQUAL? VERB,STR?65,STR?66,STR?67 /?CCL43 EQUAL? VERB,STR?63,STR?64 \?CND42 ?CCL43: PRINTC 101 ?CND42: EQUAL? VERB,STR?61,STR?62 /FALSE PRINTC 115 RTRUE .FUNCT HIM-HER-IT:ANY:1:3,OBJ,CAP,POSSESS? CALL NO-PRONOUN?,OBJ,CAP ZERO? STACK /?CCL3 ZERO? POSSESS? /TRUE PRINTI "'s" RTRUE ?CCL3: FSET? OBJ,PERSONBIT /?CCL7 ZERO? CAP \?CCL10 PRINTI " it" JUMP ?CND8 ?CCL10: PRINTI "It" ?CND8: ZERO? POSSESS? /TRUE PRINTC 115 RTRUE ?CCL7: EQUAL? OBJ,PLAYER \?CCL14 ZERO? CAP \?CCL17 PRINTI " you" JUMP ?CND15 ?CCL17: PRINTI "You" ?CND15: ZERO? POSSESS? /TRUE PRINTC 114 RTRUE ?CCL14: FSET? OBJ,PLURALBIT \?CCL21 ZERO? POSSESS? /?CCL24 ZERO? CAP \?CCL27 PRINTI " their" RTRUE ?CCL27: PRINTI "Their" RTRUE ?CCL24: ZERO? CAP \?CCL30 PRINTI " them" RTRUE ?CCL30: PRINTI "Them" RTRUE ?CCL21: FSET? OBJ,FEMALEBIT \?CCL32 ZERO? CAP \?CCL35 PRINTI " her" RTRUE ?CCL35: PRINTI "Her" RTRUE ?CCL32: ZERO? POSSESS? /?CCL38 ZERO? CAP \?CCL41 PRINTI " his" RTRUE ?CCL41: PRINTI "His" RTRUE ?CCL38: ZERO? CAP \?CCL44 PRINTI " him" RTRUE ?CCL44: PRINTI "Him" RTRUE .FUNCT I-PROMPT:ANY:0:1,GARG EQUAL? GARG,G-DEBUG /FALSE DEC 'P-PROMPT RFALSE .FUNCT DONT-F:ANY:0:0 EQUAL? PRSA,V?PANIC \?CCL3 RANDOM 2 EQUAL? STACK,1 \?CCL6 PRINTR "Very clever. It looks as if there's a lot you should be panicking about." ?CCL6: PRINTR "Why not? Your position appears quite hopeless." ?CCL3: EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR \?CCL8 PRINTR "Time doesn't pass..." ?CCL8: EQUAL? PRSA,V?TAKE \?CCL10 PRINTR "Not taken." ?CCL10: PRINTR "Not done." .FUNCT NOT-FOUND:ANY:1:1,OBJ,WT EQUAL? PRSA,V?WALK-TO \?CND1 SET 'WT,TRUE-VALUE ?CND1: ZERO? WT \?CCL5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(Y" JUMP ?CND3 ?CCL5: PRINTI "But y" ?CND3: PRINTI "ou haven't found" ICALL2 HIM-HER-IT,OBJ PRINTI " yet!" ZERO? WT \?CND6 PRINTC 41 ?CND6: CRLF RTRUE .FUNCT VERB-PRINT:ANY:0:1,GERUND,TMP GET PARSE-RESULT,1 >TMP ZERO? TMP \?CCL3 ZERO? GERUND \?CCL6 PRINTI "tell" RTRUE ?CCL6: PRINTI "walk" JUMP ?CND1 ?CCL3: ZERO? GERUND /?CCL8 GET TMP,0 >TMP EQUAL? TMP,W?L \?CCL12 PRINTB W?LOOK JUMP ?CND1 ?CCL12: EQUAL? TMP,W?X \?CCL14 PRINTB W?EXAMINE JUMP ?CND1 ?CCL14: EQUAL? TMP,W?Z \?CCL16 PRINTB W?WAIT JUMP ?CND1 ?CCL16: ZERO? GERUND /?CCL18 EQUAL? TMP,W?BATHE \?CCL21 PRINTI "bath" JUMP ?CND1 ?CCL21: EQUAL? TMP,W?DIG \?CCL23 PRINTI "digg" JUMP ?CND1 ?CCL23: EQUAL? TMP,W?GET \?CCL25 PRINTI "gett" JUMP ?CND1 ?CCL25: PRINTB TMP JUMP ?CND1 ?CCL18: PRINTB TMP JUMP ?CND1 ?CCL8: ICALL2 WORD-PRINT,TMP ?CND1: ZERO? GERUND /FALSE PRINTI "ing?" RTRUE .FUNCT NOT-IT:ANY:1:1,WHO EQUAL? WHO,P-HER-OBJECT \?CCL3 FCLEAR HER,TOUCHBIT RTRUE ?CCL3: EQUAL? WHO,P-HIM-OBJECT \?CCL5 FCLEAR HIM,TOUCHBIT RTRUE ?CCL5: EQUAL? WHO,P-THEM-OBJECT \?CCL7 FCLEAR THEM,TOUCHBIT RTRUE ?CCL7: EQUAL? WHO,P-IT-OBJECT \FALSE FCLEAR IT,TOUCHBIT RTRUE .FUNCT CAPITAL-NOUN?:ANY:1:1,WRD,?TMP1 CALL2 TITLE-NOUN?,WRD >?TMP1 ZERO? ?TMP1 /?PRD3 RETURN ?TMP1 ?PRD3: EQUAL? WRD,W?FORD,W?ZAPHOD,W?BEEBLEBROX /TRUE EQUAL? WRD,W?TRILLIAN,W?TRICIA,W?MCMILLAN /TRUE EQUAL? WRD,W?MARV,W?MARVIN,W?PREFECT /TRUE RFALSE .FUNCT TITLE-NOUN?:ANY:1:1,WRD EQUAL? WRD,W?MR,W?MS /TRUE EQUAL? WRD,W?MISTER,W?MISS,W?SIR /TRUE RFALSE .FUNCT QUEUE:ANY:2:2,RTN,TICK,CINT CALL2 INT,RTN >CINT PUT CINT,C-TICK,TICK PUT CINT,C-ENABLED?,1 RETURN CINT .FUNCT INT:ANY:1:5,RTN,DEMON,E,C,INT ADD C-TABLE,C-TABLELEN >E ADD C-TABLE,C-INTS >C ?PRG1: EQUAL? C,E \?CCL5 SUB C-INTS,C-INTLEN >C-INTS ADD C-TABLE,C-INTS >INT PUT INT,C-RTN,RTN RETURN INT ?CCL5: GET C,C-RTN EQUAL? STACK,RTN \?CND3 RETURN C ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT CLOCKER:ANY:0:0,C,E,TICK,FLG,VAL ZERO? CLOCK-WAIT /?CND1 SET 'CLOCK-WAIT,FALSE-VALUE RFALSE ?CND1: INC 'MOVES ADD C-TABLE,C-INTS >C ADD C-TABLE,C-TABLELEN >E ?PRG3: EQUAL? C,E \?CCL7 RETURN FLG ?CCL7: GET C,C-ENABLED? ZERO? STACK /?CND5 GET C,C-TICK >TICK ZERO? TICK /?CND5 SUB TICK,1 PUT C,C-TICK,STACK GRTR? TICK,1 /?CND5 GET C,C-RTN CALL STACK >VAL ZERO? VAL /?CND5 ZERO? FLG /?CCL16 EQUAL? VAL,M-FATAL \?CND5 ?CCL16: SET 'FLG,VAL ?CND5: ADD C,C-INTLEN >C JUMP ?PRG3 .ENDI