restaurant/misc.zap

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