404 lines
7.6 KiB
Plaintext
404 lines
7.6 KiB
Plaintext
|
|
|
|
.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
|