697 lines
13 KiB
Plaintext
697 lines
13 KiB
Plaintext
|
|
.SEGMENT "0"
|
|
|
|
|
|
.FUNCT WHAT-F:ANY:0:0,OBJ,TMP,NOT?,LOC?
|
|
GET PARSE-RESULT,16
|
|
BAND PARSE-NOT,STACK >NOT?
|
|
GET PARSE-RESULT,9 >LOC?
|
|
EQUAL? PRSA,V?BE? /FALSE
|
|
GET PARSE-RESULT,10 >OBJ
|
|
EQUAL? OBJ,W?WHO,W?WHAT,W?WHERE /FALSE
|
|
GET PARSE-RESULT,10 >OBJ
|
|
EQUAL? OBJ,W?WHY,W?WHEN,W?HOW /FALSE
|
|
CALL1 EVERYWHERE-VERB?
|
|
ZERO? STACK \?CCL9
|
|
PRINTR "That's precisely the sort of question you'll have to answer for yourself."
|
|
?CCL9: EQUAL? PRSI,INTPP \FALSE
|
|
CALL1 P-PP-OBJ >OBJ
|
|
ZERO? OBJ /FALSE
|
|
ZERO? NOT? \FALSE
|
|
CALL1 P-PP-PREP >TMP
|
|
ZERO? TMP \?PEN17
|
|
GET LOC?,1 >TMP
|
|
?PEN17: EQUAL? TMP,W?BEHIND \?CCL22
|
|
ICALL PERFORM,V?LOOK-BEHIND,OBJ
|
|
RTRUE
|
|
?CCL22: EQUAL? TMP,W?DOWN \?CCL24
|
|
ICALL PERFORM,V?LOOK-DOWN,OBJ
|
|
RTRUE
|
|
?CCL24: EQUAL? TMP,W?IN,W?ON,W?THROUGH \?CCL26
|
|
ICALL PERFORM,V?LOOK-INSIDE,OBJ
|
|
RTRUE
|
|
?CCL26: EQUAL? TMP,W?UNDER \FALSE
|
|
ICALL PERFORM,V?LOOK-UNDER,OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TELL-Q-WORD:ANY:0:0,WD
|
|
EQUAL? PRSA,V?BE? \?CCL3
|
|
PRINTI "if"
|
|
RTRUE
|
|
?CCL3: GET PARSE-RESULT,10 >WD
|
|
EQUAL? WD,W?WHO,W?WHAT,W?WHERE /?CTR4
|
|
GET PARSE-RESULT,10 >WD
|
|
EQUAL? WD,W?WHY,W?WHEN,W?HOW \?CCL5
|
|
?CTR4: PRINTB WD
|
|
RTRUE
|
|
?CCL5: PRINTI "whether"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT P-NEGATIVE?:ANY:0:0
|
|
GET PARSE-RESULT,16
|
|
BAND PARSE-NOT,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT TRY-QCONTEXT?:ANY:0:0,W
|
|
ZERO? QCONTEXT /FALSE
|
|
IN? QCONTEXT,HERE \FALSE
|
|
EQUAL? QCONTEXT,WINNER /FALSE
|
|
CALL1 PAST-TENSE?
|
|
ZERO? STACK \?CCL3
|
|
EQUAL? QCONTEXT,PRSO /FALSE
|
|
EQUAL? PRSA,V?ASK-ABOUT /FALSE
|
|
EQUAL? PRSA,V?TELL-ABOUT \?CCL3
|
|
EQUAL? PRSO,ME /FALSE
|
|
?CCL3: SET 'W,WINNER
|
|
SET 'WINNER,QCONTEXT
|
|
ICALL PERFORM,PRSA,PRSO,PRSI
|
|
SET 'WINNER,W
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRE-BE:ANY:0:0
|
|
CALL1 TRY-QCONTEXT?
|
|
ZERO? STACK \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-BE:ANY:0:0,TMP,NOT?,ADJ?,LOC?,OBJ,PREP
|
|
GET PARSE-RESULT,16
|
|
BAND PARSE-NOT,STACK >NOT?
|
|
GET PARSE-RESULT,11 >ADJ?
|
|
GET PARSE-RESULT,9 >LOC?
|
|
EQUAL? PRSA,V?BE?,V?WHO,V?WHAT /?CTR2
|
|
EQUAL? PRSA,V?WHERE,V?WHY,V?WHEN /?CTR2
|
|
EQUAL? PRSA,V?HOW /?CTR2
|
|
GET PARSE-RESULT,10 >TMP
|
|
EQUAL? TMP,W?WHO,W?WHAT,W?WHERE /?CTR2
|
|
GET PARSE-RESULT,10 >TMP
|
|
EQUAL? TMP,W?WHY,W?WHEN,W?HOW \?CCL3
|
|
?CTR2: CALL1 TRY-QCONTEXT?
|
|
ZERO? STACK \TRUE
|
|
EQUAL? PRSI,INTADJ \?CCL13
|
|
EQUAL? PRSO,ME,PLAYER \?CCL16
|
|
EQUAL? PRSA,V?BE? \?CCL19
|
|
PRINTI "You"
|
|
JUMP ?CND17
|
|
?CCL19: PRINT WHO-KNOWS-STRING
|
|
ICALL1 TELL-Q-WORD
|
|
PRINTI " you"
|
|
?CND17: CALL2 IS-PRSO-ADJ?,ADJ?
|
|
ZERO? STACK /?CCL22
|
|
PRINTI " are "
|
|
JUMP ?CND14
|
|
?CCL22: PRINTI " aren't "
|
|
JUMP ?CND14
|
|
?CCL16: EQUAL? PRSA,V?BE? \?CCL25
|
|
ICALL2 CTHE-PRINT,PRSO
|
|
JUMP ?CND23
|
|
?CCL25: PRINT WHO-KNOWS-STRING
|
|
ICALL1 TELL-Q-WORD
|
|
PRINTC 32
|
|
ICALL2 THE-PRINT,PRSO
|
|
?CND23: ICALL2 PRINT-IS/ARE,PRSO
|
|
CALL2 IS-PRSO-ADJ?,ADJ?
|
|
ZERO? STACK \?CND26
|
|
PRINTI "n't"
|
|
?CND26: PRINTC 32
|
|
?CND14: PRINTB ADJ?
|
|
PRINTR "."
|
|
?CCL13: EQUAL? PRSI,INTPP \?CCL29
|
|
CALL1 P-PP-PREP >PREP
|
|
ZERO? PREP /?CCL32
|
|
CALL1 P-PP-OBJ >OBJ
|
|
ZERO? OBJ /?CCL32
|
|
EQUAL? PRSA,V?BE? \?CCL37
|
|
CALL RIGHT-PREP?,PREP,PRSO,OBJ
|
|
ZERO? STACK \?PRF40
|
|
PUSH 1
|
|
JUMP ?PEN38
|
|
?PRF40: PUSH 0
|
|
?PEN38: ICALL PRSO-IS,STACK,TRUE-VALUE
|
|
PRINTC 32
|
|
PRINTB PREP
|
|
PRINTC 32
|
|
ICALL2 THE-PRINT,OBJ
|
|
PRINTR "."
|
|
?CCL37: PRINT WHO-KNOWS-STRING
|
|
ICALL1 TELL-Q-WORD
|
|
ICALL2 PRSO-IS,NOT?
|
|
PRINTC 32
|
|
PRINTB PREP
|
|
PRINTC 32
|
|
ICALL2 THE-PRINT,OBJ
|
|
PRINTR "."
|
|
?CCL32: PRINT WHO-KNOWS-STRING
|
|
ICALL1 TELL-Q-WORD
|
|
ICALL2 PRSO-IS,NOT?
|
|
PRINTC 32
|
|
GET LOC?,1
|
|
PRINTB STACK
|
|
PRINTC 32
|
|
GET LOC?,2
|
|
ICALL2 NP-PRINT,STACK
|
|
PRINTR "."
|
|
?CCL29: GET PARSE-RESULT,13
|
|
ZERO? STACK /?CCL42
|
|
CALL1 WHO-KNOWS
|
|
RSTACK
|
|
?CCL42: ZERO? PRSI \?CCL44
|
|
GET PARSE-RESULT,10
|
|
EQUAL? STACK,W?WHERE \?CCL44
|
|
EQUAL? PRSO,FALSE-VALUE,ROOMS /?CCL49
|
|
LOC PRSO >LOC?
|
|
JUMP ?CND47
|
|
?CCL49: SET 'LOC?,FALSE-VALUE
|
|
?CND47: ZERO? LOC? \?CCL52
|
|
PRINTR "That's an excellent question."
|
|
?CCL52: IN? PRSO,HERE \?CCL54
|
|
ICALL PRSO-IS,FALSE-VALUE,TRUE-VALUE
|
|
PRINTR " here."
|
|
?CCL54: EQUAL? LOC?,GENERIC-OBJECTS \?CCL56
|
|
PRINTI "You don't know where "
|
|
ICALL2 THE-PRINT,PRSO
|
|
ICALL2 PRINT-IS/ARE,PRSO
|
|
PRINTR "."
|
|
?CCL56: EQUAL? LOC?,GLOBAL-OBJECTS \?CCL58
|
|
PRINTI "No doubt "
|
|
ICALL2 THE-PRINT,PRSO
|
|
ICALL2 PRINT-IS/ARE,PRSO
|
|
PRINTR " around here somewhere."
|
|
?CCL58: EQUAL? LOC?,LOCAL-GLOBALS \?CCL60
|
|
CALL GLOBAL-IN?,PRSO,HERE
|
|
ZERO? STACK /?CCL60
|
|
ICALL2 CTHE-PRINT,PRSO
|
|
ICALL2 PRINT-IS/ARE,PRSO
|
|
PRINTR " nearby."
|
|
?CCL60: FSET? LOC?,PERSONBIT \?CCL64
|
|
ICALL2 CTHE-PRINT,LOC?
|
|
PRINTI " has "
|
|
ICALL2 THE-PRINT,PRSO
|
|
PRINTR "."
|
|
?CCL64: CALL2 META-LOC,PRSO
|
|
EQUAL? STACK,HERE \?CCL66
|
|
ICALL2 CTHE-PRINT,PRSO
|
|
ICALL2 PRINT-IS/ARE,PRSO
|
|
PRINTI " in "
|
|
ICALL2 THE-PRINT,LOC?
|
|
PRINTR "."
|
|
?CCL66: IN? LOC?,ROOMS \?CCL68
|
|
ICALL2 CTHE-PRINT,PRSO
|
|
ICALL2 PRINT-IS/ARE,PRSO
|
|
PRINTI " probably "
|
|
FSET? PRSO,TOUCHBIT \?CCL71
|
|
PRINTI "still in the place called """
|
|
ICALL2 DPRINT,LOC?
|
|
PRINTR "."""
|
|
?CCL71: FSET? PRSO,PERSONBIT /?CND72
|
|
PRINTI "lying "
|
|
?CND72: PRINTR "around somewhere."
|
|
?CCL68: PRINT WHO-KNOWS-STRING
|
|
PRINTI "where "
|
|
ICALL2 THE-PRINT,PRSO
|
|
ICALL2 PRINT-IS/ARE,PRSO
|
|
PRINTR "."
|
|
?CCL44: PRINT WHO-KNOWS-STRING
|
|
ICALL1 TELL-Q-WORD
|
|
EQUAL? PRSO,FALSE-VALUE,ROOMS /?CND74
|
|
ICALL2 PRSO-IS,NOT?
|
|
ZERO? PRSI /?CND74
|
|
PRINTC 32
|
|
ICALL1 PRINTA-PRSI
|
|
?CND74: PRINTR "."
|
|
?CCL3: EQUAL? PRSI,INTADJ \?CCL80
|
|
CALL2 IS-PRSO-ADJ?,ADJ?
|
|
ZERO? STACK /?CCL83
|
|
ZERO? NOT? /?CCL86
|
|
PRINTI "Wrong,"
|
|
JUMP ?CND84
|
|
?CCL86: PRINTI "Right,"
|
|
?CND84: ICALL2 PRSO-IS,FALSE-VALUE
|
|
JUMP ?CND81
|
|
?CCL83: ZERO? NOT? /?CCL89
|
|
PRINTI "Right,"
|
|
JUMP ?CND87
|
|
?CCL89: PRINTI "Wrong,"
|
|
?CND87: ICALL2 PRSO-IS,TRUE-VALUE
|
|
?CND81: PRINTC 32
|
|
PRINTB ADJ?
|
|
PRINTR "."
|
|
?CCL80: EQUAL? PRSI,INTPP \?CCL91
|
|
PRINTI "So, you say"
|
|
ICALL2 PRSO-IS,NOT?
|
|
PRINTC 32
|
|
CALL1 P-PP-PREP >TMP
|
|
ZERO? TMP /?CCL94
|
|
PRINTB TMP
|
|
JUMP ?CND92
|
|
?CCL94: GET LOC?,1
|
|
PRINTB STACK
|
|
?CND92: PRINTC 32
|
|
CALL1 P-PP-OBJ >TMP
|
|
ZERO? TMP /?CCL97
|
|
ICALL2 THE-PRINT,TMP
|
|
JUMP ?CND95
|
|
?CCL97: GET LOC?,2
|
|
ICALL2 NP-PRINT,STACK
|
|
?CND95: PRINTR "."
|
|
?CCL91: EQUAL? P-PRSA-WORD,W?BE \?CCL99
|
|
EQUAL? PRSO,WINNER \?CCL102
|
|
ICALL2 CTHE-PRINT,PRSO
|
|
PRINTI " is already "
|
|
PRINTI "that"
|
|
PRINTR "."
|
|
?CCL102: PRINTR "That would take a bit of magic."
|
|
?CCL99: PRINTI "So you think"
|
|
ICALL2 PRSO-IS,NOT?
|
|
ZERO? PRSI /?CND103
|
|
PRINTC 32
|
|
ICALL1 PRINTA-PRSI
|
|
?CND103: PRINTR "."
|
|
|
|
|
|
.FUNCT RIGHT-PREP?:ANY:3:3,PREP,OBJ,CONT
|
|
IN? OBJ,CONT \FALSE
|
|
EQUAL? PREP,W?IN,W?INSIDE \?CCL5
|
|
CALL2 SEE-INSIDE?,CONT
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
?CCL5: EQUAL? PREP,W?ON \FALSE
|
|
FSET? CONT,SURFACEBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-BE?:ANY:0:0
|
|
CALL1 V-BE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WHO:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?CCL3: ZERO? PRSI \?CCL5
|
|
PRINTI "You don't know anything special about "
|
|
ICALL1 THE-PRINT-PRSO
|
|
PRINTR "."
|
|
?CCL5: CALL1 V-BE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WHAT:ANY:0:0
|
|
CALL1 V-WHO
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PRE-WHERE:ANY:0:0
|
|
ZERO? PRSS \FALSE
|
|
ZERO? PRSQ \FALSE
|
|
ICALL PERFORM,V?FIND,PRSO,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-WHERE:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?CCL3: CALL1 V-BE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WHEN:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?CCL3: CALL1 V-BE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WHY:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?CCL3: CALL1 V-BE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-HOW:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \?CCL3
|
|
CALL1 MORE-SPECIFIC
|
|
RSTACK
|
|
?CCL3: CALL1 V-BE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT QUIET?:ANY:1:1,OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT OUTSIDE?:ANY:1:1,OBJ
|
|
FSET? HERE,OUTSIDE /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT OPEN?:ANY:1:1,OBJ
|
|
FSET? OBJ,OPENABLE /?PRD3
|
|
FSET? OBJ,DOORBIT \FALSE
|
|
?PRD3: FSET? OBJ,OPENBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT Q-CLOSED?:ANY:1:1,OBJ
|
|
FSET? OBJ,OPENABLE /?PRD3
|
|
FSET? OBJ,DOORBIT \FALSE
|
|
?PRD3: FSET? OBJ,OPENBIT /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT LOCKED?:ANY:1:1,OBJ
|
|
FSET? OBJ,DOORBIT \FALSE
|
|
FSET? OBJ,LOCKED /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT UNLOCKED?:ANY:1:1,OBJ
|
|
FSET? OBJ,DOORBIT \FALSE
|
|
FSET? OBJ,LOCKED /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT DEAD?:ANY:1:1,OBJ
|
|
FSET? OBJ,PERSONBIT \TRUE
|
|
FSET? OBJ,DEAD /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ALIVE?:ANY:1:1,OBJ
|
|
FSET? OBJ,PERSONBIT \FALSE
|
|
FSET? OBJ,DEAD /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRSO-IS:ANY:1:2,NOT?,CAP?
|
|
EQUAL? PRSO,ME,PLAYER \?CCL3
|
|
ZERO? CAP? /?CCL6
|
|
PRINTI "You"
|
|
JUMP ?CND4
|
|
?CCL6: PRINTI " you"
|
|
?CND4: PRINTI " are"
|
|
ZERO? NOT? /FALSE
|
|
PRINTI "n't"
|
|
RTRUE
|
|
?CCL3: ZERO? CAP? /?CCL12
|
|
ICALL2 CTHE-PRINT,PRSO
|
|
JUMP ?CND10
|
|
?CCL12: PRINTC 32
|
|
ICALL2 THE-PRINT,PRSO
|
|
?CND10: ICALL2 PRINT-IS/ARE,PRSO
|
|
ZERO? NOT? /FALSE
|
|
PRINTI "n't"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRINT-IS/ARE:ANY:1:1,OBJ
|
|
FSET? OBJ,PLURAL /?CTR2
|
|
EQUAL? OBJ,BLACKTHORNE,ME,YOU \?CCL3
|
|
?CTR2: PRINTI " are"
|
|
RTRUE
|
|
?CCL3: PRINTI " is"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT IS-PRSO-ADJ?:ANY:1:1,ADJ,TMP
|
|
GETPT PRSO,P?ADJECTIVE >TMP
|
|
ZERO? TMP /?CCL3
|
|
PTSIZE TMP
|
|
DIV STACK,2
|
|
INTBL? ADJ,TMP,STACK /TRUE
|
|
?CCL3: GET ADJ-TABLE,0
|
|
INTBL? ADJ,ADJ-TABLE,STACK >TMP \FALSE
|
|
GET TMP,1
|
|
CALL STACK,PRSO
|
|
ZERO? STACK \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PP?:ANY:2:2,P,N,TMP
|
|
GET PARSE-RESULT,9 >TMP
|
|
ZERO? TMP /FALSE
|
|
ZERO? P /FALSE
|
|
CALL1 P-PP-PREP
|
|
EQUAL? P,STACK \FALSE
|
|
ZERO? N /FALSE
|
|
CALL1 P-PP-OBJ
|
|
EQUAL? N,STACK /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT V-STATEMENT:ANY:0:0
|
|
CALL1 V-DO?
|
|
RSTACK
|
|
|
|
|
|
.FUNCT WHO-KNOWS:ANY:0:1,WD,OBJ,SUBJ,V,M,N,?TMP1
|
|
ASSIGNED? 'WD /?CND1
|
|
GET PARSE-RESULT,14 >WD
|
|
?CND1: GET PARSE-RESULT,10
|
|
EQUAL? STACK,W?WHO,W?WHAT \?CCL5
|
|
GET P-PRSA-WORD,3
|
|
GET STACK,2 >OBJ
|
|
ZERO? OBJ /?CCL5
|
|
CALL GET-SYNTAX,OBJ,1,0,TRUE-VALUE
|
|
ZERO? STACK /?CCL5
|
|
CALL DETERMINE-OBJ,FALSE-VALUE,1,TRUE-VALUE >OBJ
|
|
ZERO? OBJ /?CCL5
|
|
GET OBJ,3 >OBJ
|
|
ZERO? OBJ /?CCL5
|
|
PRINTI "Perhaps"
|
|
JUMP ?CND3
|
|
?CCL5: SET 'OBJ,FALSE-VALUE
|
|
PRINT WHO-KNOWS-STRING
|
|
ICALL1 TELL-Q-WORD
|
|
?CND3: GET PARSE-RESULT,13 >SUBJ
|
|
ZERO? SUBJ /?CCL13
|
|
GET SUBJ,3 >SUBJ
|
|
JUMP ?CND11
|
|
?CCL13: EQUAL? PRSO,FALSE-VALUE,ROOMS /?CCL15
|
|
SET 'SUBJ,PRSO
|
|
?CND11: PRINTC 32
|
|
EQUAL? SUBJ,ME,PLAYER \?CCL18
|
|
PRINTI "you"
|
|
JUMP ?CND16
|
|
?CCL15: PRINTR "."
|
|
?CCL18: ICALL2 THE-PRINT,SUBJ
|
|
?CND16: ZERO? WD /?CND19
|
|
EQUAL? WD,W?DO,W?DOES,W?DID \?CCL22
|
|
GET PARSE-RESULT,13
|
|
ZERO? STACK \?CND19
|
|
?CCL22: PRINTC 32
|
|
PRINTB WD
|
|
?CND19: GET PARSE-RESULT,13
|
|
ZERO? STACK /?CND25
|
|
PRINTC 32
|
|
ZERO? WD /?CCL29
|
|
EQUAL? WD,W?DID \?CCL32
|
|
GETB VOCAB,0
|
|
ADD 1,STACK
|
|
ADD VOCAB,STACK >V
|
|
GETB V,0
|
|
BOR 128,STACK >M
|
|
EQUAL? P-PRSA-WORD,W?GET \?CCL37
|
|
PRINTI "got"
|
|
JUMP ?CND30
|
|
?CCL37: ADD V,9 >?TMP1
|
|
ADD V,1
|
|
GET STACK,0
|
|
INTBL? P-PRSA-WORD,?TMP1,STACK,M >N \?CCL39
|
|
GET N,1
|
|
BTST STACK,PAST-TENSE \?CCL39
|
|
PRINTB N
|
|
JUMP ?CND30
|
|
?CCL39: PRINTB P-PRSA-WORD
|
|
PRINTI "ed"
|
|
JUMP ?CND30
|
|
?CCL32: PRINTB P-PRSA-WORD
|
|
EQUAL? WD,W?DO,W?DOES \?CND30
|
|
EQUAL? SUBJ,ME,PLAYER /?CND30
|
|
FSET? SUBJ,PLURAL /?CND30
|
|
PRINTC 115
|
|
?CND30: ZERO? OBJ /?CCL49
|
|
PRINTC 32
|
|
EQUAL? OBJ,SUBJ \?CCL52
|
|
FSET? OBJ,PERSONBIT /?CCL55
|
|
PRINTI "it"
|
|
JUMP ?CND53
|
|
?CCL55: FSET? OBJ,FEMALE \?CCL57
|
|
PRINTI "her"
|
|
JUMP ?CND53
|
|
?CCL57: PRINTI "him"
|
|
?CND53: PRINTI "self"
|
|
JUMP ?CND25
|
|
?CCL52: ICALL2 THE-PRINT,OBJ
|
|
JUMP ?CND25
|
|
?CCL49: ICALL1 ECHO-NOUNS
|
|
JUMP ?CND25
|
|
?CCL29: PRINTB P-PRSA-WORD
|
|
?CND25: PRINTR "."
|
|
|
|
|
|
.FUNCT ECHO-NOUNS:ANY:0:0,WD
|
|
EQUAL? PRSO,0,WHAT,NOT-HERE-OBJECT /?CND1
|
|
GET PARSE-RESULT,7 >WD
|
|
ZERO? WD /?CND3
|
|
PRINTC 32
|
|
PRINTB WD
|
|
?CND3: PRINTC 32
|
|
ICALL2 THE-PRINT,PRSO
|
|
?CND1: EQUAL? PRSI,0,WHAT,NOT-HERE-OBJECT /FALSE
|
|
GET PARSE-RESULT,8 >WD
|
|
ZERO? WD /?CND8
|
|
PRINTC 32
|
|
PRINTB WD
|
|
?CND8: PRINTC 32
|
|
CALL2 THE-PRINT,PRSI
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-CAN?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?CAN
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-MAY?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?MAY
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-DO?:ANY:0:0
|
|
CALL1 TRY-QCONTEXT?
|
|
ZERO? STACK \TRUE
|
|
GET PARSE-RESULT,16
|
|
BTST STACK,PARSE-QUESTION /?CCL5
|
|
ZERO? PRSS \?CCL8
|
|
ICALL1 MORE-SPECIFIC
|
|
RTRUE
|
|
?CCL8: PRINTI "So you think"
|
|
EQUAL? PRSS,ME,PLAYER \?CCL11
|
|
PRINTI " you "
|
|
GET PARSE-RESULT,16
|
|
BTST STACK,1 \?CND9
|
|
PRINTI "don't "
|
|
JUMP ?CND9
|
|
?CCL11: PRINTC 32
|
|
ICALL2 THE-PRINT,PRSS
|
|
PRINTC 32
|
|
GET PARSE-RESULT,16
|
|
BTST STACK,1 \?CND9
|
|
PRINTI "doesn't "
|
|
?CND9: PRINTB P-PRSA-WORD
|
|
ICALL1 ECHO-NOUNS
|
|
PRINTR "."
|
|
?CCL5: CALL1 WHO-KNOWS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-COULD?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?COULD
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WOULD?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?WOULD
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-SHOULD?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?SHOULD
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-MIGHT?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?MIGHT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-WILL?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?WILL
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-MUST?:ANY:0:0
|
|
CALL2 WHO-KNOWS,W?MUST
|
|
RSTACK
|
|
|
|
|
|
.FUNCT QUESTION-VERB?:ANY:0:0,TMP
|
|
GET PARSE-RESULT,10 >TMP
|
|
EQUAL? TMP,W?WHO,W?WHAT,W?WHERE /TRUE
|
|
GET PARSE-RESULT,10 >TMP
|
|
EQUAL? TMP,W?WHY,W?WHEN,W?HOW /TRUE
|
|
EQUAL? PRSA,V?BE?,V?CAN?,V?COULD? /TRUE
|
|
EQUAL? PRSA,V?DO?,V?MAY?,V?MIGHT? /TRUE
|
|
EQUAL? PRSA,V?MUST?,V?SHOULD?,V?WILL? /TRUE
|
|
EQUAL? PRSA,V?WOULD? /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PRE-DROP?:ANY:0:0
|
|
LOC PRSS
|
|
EQUAL? PRSO,STACK \FALSE
|
|
ICALL PERFORM,V?DISEMBARK,PRSO,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT V-DROP?:ANY:0:0
|
|
EQUAL? PRSO,ROOMS \FALSE
|
|
PRINT STR?61
|
|
PRINTR "hanging from anything."
|
|
|
|
|
|
.FUNCT V-DISEMBARK?:ANY:0:0,AV
|
|
LOC PRSS >AV
|
|
EQUAL? PRSO,FALSE-VALUE,ROOMS \?CCL3
|
|
ZERO? AV /?CCL6
|
|
IN? AV,ROOMS /?CCL6
|
|
ICALL PERFORM,PRSA,AV,PRSI
|
|
RTRUE
|
|
?CCL6: PRINT STR?61
|
|
PRINTR "in anything."
|
|
?CCL3: ZERO? AV /?CCL10
|
|
IN? AV,ROOMS /?CCL10
|
|
EQUAL? AV,PRSO /FALSE
|
|
CALL HELD?,AV,PRSO
|
|
ZERO? STACK \FALSE
|
|
PRINT STR?55
|
|
FSET? AV,SURFACEBIT \?CCL20
|
|
PRINTI " on "
|
|
JUMP ?CND18
|
|
?CCL20: PRINTI " in "
|
|
?CND18: ICALL2 THE-PRINT,AV
|
|
PRINTR "!"
|
|
?CCL10: LOC PRSO
|
|
ZERO? STACK /?CCL22
|
|
ICALL PERFORM,V?TAKE,PRSO,PRSI
|
|
RTRUE
|
|
?CCL22: PRINT STR?117
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRE-TAKE?:ANY:0:0
|
|
ZERO? PRSI \FALSE
|
|
CALL1 PRE-TAKE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT V-TAKE?:ANY:0:0
|
|
GET PARSE-RESULT,10
|
|
ZERO? STACK \FALSE
|
|
PRINTR "Seems reasonable."
|
|
|
|
.ENDSEG
|
|
|
|
.ENDI
|