mirror of
https://github.com/historicalsource/moonmist
synced 2024-05-20 09:48:32 +03:00
3162 lines
67 KiB
Plaintext
3162 lines
67 KiB
Plaintext
|
|
|
|
.FUNCT MAIN-LOOP,X
|
|
?PRG1: CALL MAIN-LOOP-1 >X
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,V,PTBL,OBJ1,TMP,X,GW,?TMP1
|
|
SET 'CNT,0
|
|
SET 'OBJ,FALSE-VALUE
|
|
SET 'PTBL,TRUE-VALUE
|
|
CALL PARSER >P-WON
|
|
ZERO? P-WON /?CCL3
|
|
SET 'CLOCK-WAIT,FALSE-VALUE
|
|
GETB P-PRSI,P-MATCHLEN >ICNT
|
|
GETB P-PRSO,P-MATCHLEN >OCNT
|
|
ZERO? OCNT \?CCL6
|
|
ZERO? ICNT /?CND4
|
|
?CCL6: ZERO? P-IT-OBJECT /?CND4
|
|
CALL ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK /?CND4
|
|
SET 'TMP,FALSE-VALUE
|
|
?PRG12: IGRTR? 'CNT,ICNT /?REP13
|
|
GETB P-PRSI,CNT
|
|
EQUAL? STACK,IT \?PRG12
|
|
PUTB P-PRSI,CNT,P-IT-OBJECT
|
|
CALL TELL-I-ASSUME,P-IT-OBJECT
|
|
SET 'TMP,TRUE-VALUE
|
|
?REP13: SET 'CNT,0
|
|
?PRG19: IGRTR? 'CNT,OCNT /?REP20
|
|
GETB P-PRSO,CNT
|
|
EQUAL? STACK,IT \?PRG19
|
|
PUTB P-PRSO,CNT,P-IT-OBJECT
|
|
CALL TELL-I-ASSUME,P-IT-OBJECT
|
|
?REP20: SET 'CNT,0
|
|
?CND4: ZERO? OCNT \?CCL27
|
|
SET 'NUM,OCNT
|
|
JUMP ?CND25
|
|
?CCL27: GRTR? OCNT,1 \?CCL29
|
|
ZERO? ICNT \?CCL32
|
|
SET 'OBJ,FALSE-VALUE
|
|
JUMP ?CND30
|
|
?CCL32: GETB P-PRSI,1 >OBJ
|
|
?CND30: SET 'NUM,OCNT
|
|
JUMP ?CND25
|
|
?CCL29: GRTR? ICNT,1 \?CCL34
|
|
SET 'PTBL,FALSE-VALUE
|
|
GETB P-PRSO,1 >OBJ
|
|
SET 'NUM,ICNT
|
|
JUMP ?CND25
|
|
?CCL34: SET 'NUM,1
|
|
?CND25: ZERO? OBJ \?CND35
|
|
EQUAL? ICNT,1 \?CND35
|
|
GETB P-PRSI,1 >OBJ
|
|
?CND35: EQUAL? PRSA,V?WALK \?CCL41
|
|
CALL PERFORM,PRSA,PRSO >V
|
|
JUMP ?CND39
|
|
?CCL41: ZERO? NUM \?CCL44
|
|
GETB P-SYNTAX,P-SBITS
|
|
BAND STACK,P-SONUMS
|
|
ZERO? STACK \?CCL47
|
|
CALL PERFORM,PRSA >V
|
|
SET 'PRSO,FALSE-VALUE
|
|
JUMP ?CND39
|
|
?CCL47: ZERO? LIT \?CCL49
|
|
CALL SEE-VERB?
|
|
ZERO? STACK /?CCL49
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
SET 'P-CONT,FALSE-VALUE
|
|
CALL TOO-DARK
|
|
JUMP ?CND39
|
|
?CCL49: SET 'QUOTE-FLAG,FALSE-VALUE
|
|
SET 'P-CONT,FALSE-VALUE
|
|
PRINTI "(There isn't any"
|
|
ZERO? PTBL /?PRD58
|
|
GETB P-SYNTAX,P-SFWIM1
|
|
EQUAL? STACK,PERSONBIT /?PRG63
|
|
?PRD58: ZERO? PTBL \?PRG65
|
|
GETB P-SYNTAX,P-SFWIM2
|
|
EQUAL? STACK,PERSONBIT \?PRG65
|
|
?PRG63: PRINTI "one"
|
|
JUMP ?PRG67
|
|
?PRG65: PRINTI "thing"
|
|
?PRG67: PRINTI " to "
|
|
GET P-ITBL,P-VERBN >TMP
|
|
EQUAL? PRSA,V?TELL \?CCL71
|
|
PRINTI "talk to"
|
|
JUMP ?PRG78
|
|
?CCL71: ZERO? P-MERGED \?CTR74
|
|
ZERO? P-OFLAG /?CCL75
|
|
?CTR74: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?PRG78
|
|
?CCL75: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK >V
|
|
?PRG78: PRINTI "!)"
|
|
CRLF
|
|
SET 'V,FALSE-VALUE
|
|
JUMP ?CND39
|
|
?CCL44: ZERO? PTBL /?CCL81
|
|
GRTR? NUM,1 \?CCL81
|
|
EQUAL? PRSA,V?COMPARE \?CCL81
|
|
CALL PERFORM,PRSA,OBJECT-PAIR >V
|
|
JUMP ?CND39
|
|
?CCL81: SET 'X,0
|
|
SET 'TMP,0
|
|
SET 'GW,FALSE-VALUE
|
|
?PRG85: IGRTR? 'CNT,NUM \?CCL89
|
|
GRTR? X,0 \?CCL92
|
|
PRINTI "The "
|
|
EQUAL? X,NUM /?PRG99
|
|
PRINTI "other "
|
|
?PRG99: PRINTI "object"
|
|
EQUAL? X,1 /?PRG105
|
|
PRINTC 115
|
|
?PRG105: PRINTI " that you mentioned "
|
|
EQUAL? X,1 /?PRG112
|
|
PRINTI "are"
|
|
JUMP ?PRG114
|
|
?PRG112: PRINTI "is"
|
|
?PRG114: PRINTI "n't here."
|
|
CRLF
|
|
JUMP ?CND39
|
|
?CCL92: ZERO? TMP \?CND39
|
|
CALL MORE-SPECIFIC
|
|
JUMP ?CND39
|
|
?CCL89: ZERO? PTBL /?CCL119
|
|
GETB P-PRSO,CNT >OBJ1
|
|
JUMP ?CND117
|
|
?CCL119: GETB P-PRSI,CNT >OBJ1
|
|
?CND117: GRTR? NUM,1 /?CCL121
|
|
GET P-ITBL,P-NC1
|
|
GET STACK,0
|
|
EQUAL? STACK,W?ALL \?CND120
|
|
?CCL121: EQUAL? OBJ1,NOT-HERE-OBJECT \?CCL126
|
|
INC 'X
|
|
JUMP ?PRG85
|
|
?CCL126: EQUAL? P-GETFLAGS,P-ALL \?CCL128
|
|
CALL VERB-ALL-TEST,OBJ1,OBJ
|
|
ZERO? STACK /?PRG85
|
|
?CCL128: CALL ACCESSIBLE?,OBJ1
|
|
ZERO? STACK /?PRG85
|
|
EQUAL? OBJ1,PLAYER /?PRG85
|
|
EQUAL? OBJ1,COSTUME \?CND135
|
|
ZERO? GW \?PRG85
|
|
SET 'GW,TRUE-VALUE
|
|
?CND135: EQUAL? OBJ1,IT \?CCL142
|
|
PRINTD P-IT-OBJECT
|
|
JUMP ?PRG143
|
|
?CCL142: PRINTD OBJ1
|
|
?PRG143: PRINTI ": "
|
|
?CND120: SET 'TMP,TRUE-VALUE
|
|
ZERO? PTBL /?CCL147
|
|
PUSH OBJ1
|
|
JUMP ?CND145
|
|
?CCL147: PUSH OBJ
|
|
?CND145: CALL QCONTEXT-CHECK,STACK >V
|
|
ZERO? PTBL /?CCL150
|
|
SET 'PRSO,OBJ1
|
|
SET 'PRSI,OBJ
|
|
JUMP ?CND148
|
|
?CCL150: SET 'PRSO,OBJ
|
|
SET 'PRSI,OBJ1
|
|
?CND148: CALL PERFORM,PRSA,PRSO,PRSI >V
|
|
EQUAL? V,M-FATAL \?PRG85
|
|
?CND39: SET 'OPRSO,PRSO
|
|
EQUAL? V,M-FATAL \?CND1
|
|
SET 'P-CONT,FALSE-VALUE
|
|
JUMP ?CND1
|
|
?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
SET 'P-CONT,FALSE-VALUE
|
|
?CND1: ZERO? CLOCK-WAIT \?CND155
|
|
ZERO? P-WON /?CND155
|
|
CALL GAME-VERB?
|
|
ZERO? STACK \?CND155
|
|
SET 'CLOCKER-RUNNING,1
|
|
CALL CLOCKER >V
|
|
SET 'CLOCKER-RUNNING,2
|
|
?CND155: SET 'PRSA,FALSE-VALUE
|
|
SET 'PRSO,FALSE-VALUE
|
|
SET 'PRSI,FALSE-VALUE
|
|
RETURN PRSI
|
|
|
|
|
|
.FUNCT TELL-I-ASSUME,OBJ,STR=0
|
|
ZERO? STR \?PRG8
|
|
EQUAL? OPRSO,OBJ /FALSE
|
|
FSET? OBJ,SECRETBIT /FALSE
|
|
?PRG8: PRINT I-ASSUME
|
|
ZERO? STR /?PRG14
|
|
PRINT STR
|
|
?PRG14: CALL PRINTT,OBJ
|
|
PRINTR ".]"
|
|
|
|
|
|
.FUNCT VERB-ALL-TEST,O,I,L
|
|
LOC O >L
|
|
EQUAL? O,PAINT /FALSE
|
|
EQUAL? PRSA,V?GIVE,V?DROP \?CCL5
|
|
EQUAL? O,NOW-WEARING /FALSE
|
|
EQUAL? L,WINNER /TRUE
|
|
RFALSE
|
|
?CCL5: EQUAL? PRSA,V?PUT-IN,V?PUT \?CCL13
|
|
EQUAL? O,I,NOW-WEARING /FALSE
|
|
IN? O,I /FALSE
|
|
RTRUE
|
|
?CCL13: EQUAL? PRSA,V?TAKE \?CCL20
|
|
FSET? O,SECRETBIT /FALSE
|
|
FSET? O,TAKEBIT /?CND21
|
|
FSET? O,TRYTAKEBIT \FALSE
|
|
?CND21: ZERO? I /?CCL29
|
|
EQUAL? L,I /?CND27
|
|
RFALSE
|
|
?CCL29: EQUAL? L,HERE \?CND27
|
|
EQUAL? O,CANDLE \TRUE
|
|
EQUAL? P-PRSA-WORD,W?RAISE,W?LIFT /TRUE
|
|
RFALSE
|
|
?CND27: FSET? L,PERSONBIT /TRUE
|
|
FSET? L,SURFACEBIT /TRUE
|
|
FSET? L,CONTBIT \FALSE
|
|
FSET? L,OPENBIT /TRUE
|
|
RFALSE
|
|
?CCL20: ZERO? I /TRUE
|
|
EQUAL? O,I /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT GAME-VERB?
|
|
EQUAL? PRSA,V?$VERIFY,V?VERSION /TRUE
|
|
EQUAL? PRSA,V?VERBOSE,V?UNSCRIPT,V?TIME /TRUE
|
|
EQUAL? PRSA,V?TELL,V?SUPER-BRIEF,V?SCRIPT /TRUE
|
|
EQUAL? PRSA,V?SCORE,V?SAVE,V?RESTORE /TRUE
|
|
EQUAL? PRSA,V?RESTART,V?QUIT,V?BRIEF /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT QCONTEXT-CHECK,PER,OTHER,WHO=0,N=0
|
|
EQUAL? PRSA,V?HELP /?CCL3
|
|
EQUAL? PRSA,V?TELL-ABOUT,V?SHOW \FALSE
|
|
EQUAL? PER,PLAYER \FALSE
|
|
?CCL3: FIRST? HERE >OTHER /?PRG9
|
|
?PRG9: ZERO? OTHER /?REP10
|
|
FSET? OTHER,PERSONBIT \?CND11
|
|
FSET? OTHER,INVISIBLE /?CND11
|
|
EQUAL? OTHER,PLAYER /?CND11
|
|
INC 'N
|
|
SET 'WHO,OTHER
|
|
?CND11: NEXT? OTHER >OTHER /?PRG9
|
|
JUMP ?PRG9
|
|
?REP10: EQUAL? 1,N \?CND19
|
|
ZERO? QCONTEXT \?CND19
|
|
SET 'QCONTEXT,WHO
|
|
?CND19: CALL QCONTEXT-GOOD?
|
|
ZERO? STACK /FALSE
|
|
EQUAL? WINNER,PLAYER \FALSE
|
|
SET 'WINNER,QCONTEXT
|
|
PRINTI "(said to "
|
|
PRINTD QCONTEXT
|
|
PRINTR ")"
|
|
|
|
|
|
.FUNCT QCONTEXT-GOOD?
|
|
ZERO? QCONTEXT /FALSE
|
|
FSET? QCONTEXT,PERSONBIT \FALSE
|
|
FSET? QCONTEXT,MUNGBIT /FALSE
|
|
CALL META-LOC,QCONTEXT
|
|
EQUAL? HERE,STACK \FALSE
|
|
RETURN QCONTEXT
|
|
|
|
|
|
.FUNCT NOT-IT,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-IT-OBJECT \FALSE
|
|
FCLEAR IT,TOUCHBIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=0,OBJ=0
|
|
EQUAL? PRSO,NOT-HERE-OBJECT \?CCL3
|
|
EQUAL? PRSI,NOT-HERE-OBJECT \?CCL3
|
|
PRINTI "(Those things aren't here!)"
|
|
CRLF
|
|
RETURN 2
|
|
?CCL3: EQUAL? PRSO,NOT-HERE-OBJECT \?CCL11
|
|
SET 'TBL,P-PRSO
|
|
SET 'PRSO?,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL11: SET 'TBL,P-PRSI
|
|
?CND1: EQUAL? P-XADJ,A?MY \?CND12
|
|
EQUAL? P-XNAM,W?EYE,W?EYES \?CCL16
|
|
SET 'OBJ,EYE
|
|
JUMP ?CND14
|
|
?CCL16: EQUAL? P-XNAM,W?HANDS,W?HAND \?CCL18
|
|
SET 'OBJ,HANDS
|
|
JUMP ?CND14
|
|
?CCL18: EQUAL? P-XNAM,W?HEAD \?CND14
|
|
SET 'OBJ,HEAD
|
|
?CND14: ZERO? OBJ /?CND12
|
|
ZERO? PRSO? /?CCL24
|
|
SET 'PRSO,OBJ
|
|
RFALSE
|
|
?CCL24: SET 'PRSI,OBJ
|
|
RFALSE
|
|
?CND12: EQUAL? P-ADJN,W?YOUR,W?HER,W?HIS \?CND25
|
|
ZERO? P-NAM /?CND25
|
|
CALL RESOLVE-YOUR-HER-HIS
|
|
?CND25: ZERO? PRSO? /?PRD32
|
|
CALL PRSO-VERB?
|
|
ZERO? STACK \?CCL30
|
|
?PRD32: ZERO? PRSO? \?PRG44
|
|
CALL PRSI-VERB?
|
|
ZERO? STACK /?PRG44
|
|
?CCL30: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
|
|
ZERO? OBJ /FALSE
|
|
EQUAL? OBJ,NOT-HERE-OBJECT /?PRG44
|
|
RETURN 2
|
|
?PRG44: PRINTC 40
|
|
CALL HE-SHE-IT,WINNER,TRUE-VALUE
|
|
PRINTI " can't "
|
|
EQUAL? PRSA,V?LISTEN \?PRG51
|
|
PRINTI "hear"
|
|
JUMP ?CND46
|
|
?PRG51: PRINTI "see"
|
|
?CND46: CALL CAPITAL-NOUN?,P-XNAM
|
|
ZERO? STACK \?CND53
|
|
PRINTI " any"
|
|
?CND53: CALL NOT-HERE-PRINT
|
|
PRINTI " right here!)"
|
|
CRLF
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT PRSO-VERB?
|
|
EQUAL? PRSA,V?WALK-TO,V?WAIT-FOR /TRUE
|
|
EQUAL? PRSA,V?USE,V?THROUGH,V?TELL /TRUE
|
|
EQUAL? PRSA,V?TALK-ABOUT,V?LEAVE,V?FOLLOW /TRUE
|
|
EQUAL? PRSA,V?FIND,V?DESCRIBE,V?DRESS /TRUE
|
|
EQUAL? PRSA,V?DISEMBARK,V?CLIMB-UP,V?CLIMB-DOWN /TRUE
|
|
EQUAL? PRSA,V?BOARD,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /TRUE
|
|
EQUAL? WINNER,PLAYER /FALSE
|
|
EQUAL? PRSA,V?SSHOW,V?TAKE,V?GIVE /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PRSI-VERB?
|
|
EQUAL? PRSA,V?TELL-ABOUT,V?TAKE-TO /TRUE
|
|
EQUAL? PRSA,V?SEARCH-FOR,V?ASK-FOR,V?ASK-ABOUT /TRUE
|
|
EQUAL? WINNER,PLAYER /FALSE
|
|
EQUAL? PRSA,V?SHOW,V?SGIVE /TRUE
|
|
EQUAL? PRSA,V?SSHOW /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT GEN-TEST,OBJ
|
|
CALL VISIBLE?,OBJ
|
|
ZERO? STACK \TRUE
|
|
CALL CORRIDOR-LOOK,OBJ
|
|
ZERO? STACK \TRUE
|
|
EQUAL? PRSA,V?FOLLOW /?PRD9
|
|
CALL REMOTE-VERB?
|
|
ZERO? STACK /FALSE
|
|
?PRD9: FSET? OBJ,PERSONBIT \FALSE
|
|
FSET? OBJ,SEENBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT NOT-SECRET-TEST,OBJ
|
|
FSET? OBJ,SECRETBIT \TRUE
|
|
FSET? OBJ,SEENBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT PRUNE,TBL,LEN,FCN,CNT=1,OBJ
|
|
?PRG1: GETB TBL,CNT >OBJ
|
|
CALL FCN,OBJ
|
|
ZERO? STACK \?CND3
|
|
DEC 'LEN
|
|
CALL ELIMINATE,TBL,CNT,LEN
|
|
GRTR? CNT,LEN \?PRG1
|
|
?CND3: IGRTR? 'CNT,LEN \?PRG1
|
|
PUTB TBL,P-MATCHLEN,LEN
|
|
RETURN LEN
|
|
|
|
|
|
.FUNCT ELIMINATE,TBL,CNT,N
|
|
?PRG1: ADD 1,CNT
|
|
GETB TBL,STACK
|
|
PUTB TBL,CNT,STACK
|
|
IGRTR? 'CNT,N \?PRG1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT MOBY-FIND,TBL,OBJ=1,LEN,FOO
|
|
SET 'P-NAM,P-XNAM
|
|
SET 'P-ADJ,P-XADJ
|
|
PUTB TBL,P-MATCHLEN,0
|
|
?PRG3: CALL META-LOC,OBJ,TRUE-VALUE >FOO
|
|
ZERO? FOO /?CND5
|
|
CALL THIS-IT?,OBJ >FOO
|
|
ZERO? FOO /?CND5
|
|
CALL OBJ-FOUND,OBJ,TBL >FOO
|
|
?CND5: IGRTR? 'OBJ,LAST-OBJECT \?PRG3
|
|
SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
GETB TBL,P-MATCHLEN >LEN
|
|
EQUAL? LEN,1 /?CCL12
|
|
RETURN LEN
|
|
?CCL12: GETB TBL,1 >P-MOBY-FOUND
|
|
RETURN LEN
|
|
|
|
|
|
.FUNCT FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ,LEN,CNT,LOCAL=0
|
|
CALL MOBY-FIND,TBL >M-F
|
|
GRTR? M-F,1 \?CND1
|
|
SET 'CNT,0
|
|
?PRG3: IGRTR? 'CNT,M-F /?REP4
|
|
GETB TBL,CNT >OBJ
|
|
CALL GEN-TEST,OBJ
|
|
ZERO? STACK /?PRG3
|
|
IGRTR? 'LOCAL,1 /?REP4
|
|
SET 'P-MOBY-FOUND,OBJ
|
|
JUMP ?PRG3
|
|
?REP4: EQUAL? LOCAL,1 \?CND1
|
|
SET 'M-F,1
|
|
?CND1: EQUAL? 1,M-F \?CCL16
|
|
CALL REMOTE-VERB?
|
|
ZERO? STACK \?CCL19
|
|
FSET? P-MOBY-FOUND,SECRETBIT \?CCL19
|
|
CALL NOT-FOUND,P-MOBY-FOUND
|
|
RTRUE
|
|
?CCL19: CALL REMOTE-VERB?
|
|
ZERO? STACK \?CCL23
|
|
EQUAL? PRSA,V?$CALL /?CCL23
|
|
CALL VISIBLE?,P-MOBY-FOUND
|
|
ZERO? STACK \?CCL23
|
|
CALL NOT-HERE,P-MOBY-FOUND
|
|
RTRUE
|
|
?CCL23: ZERO? PRSO? /?CCL28
|
|
SET 'PRSO,P-MOBY-FOUND
|
|
RFALSE
|
|
?CCL28: SET 'PRSI,P-MOBY-FOUND
|
|
RFALSE
|
|
?CCL16: LESS? 1,M-F \?CCL30
|
|
GETB TBL,1 >OBJ
|
|
FSET? OBJ,PERSONBIT \?CCL30
|
|
GETB TBL,P-MATCHLEN
|
|
CALL PRUNE,TBL,STACK,GEN-TEST >LEN
|
|
ZERO? LEN \?CCL35
|
|
RETURN NOT-HERE-OBJECT
|
|
?CCL35: EQUAL? LEN,1 /?CND33
|
|
CALL WHICH-PRINT,0,LEN,TBL
|
|
EQUAL? TBL,P-PRSO \?CCL39
|
|
SET 'P-ACLAUSE,P-NC1
|
|
JUMP ?CND37
|
|
?CCL39: SET 'P-ACLAUSE,P-NC2
|
|
?CND37: SET 'P-AADJ,P-ADJ
|
|
SET 'P-ANAM,P-NAM
|
|
CALL ORPHAN,FALSE-VALUE,FALSE-VALUE
|
|
SET 'P-OFLAG,TRUE-VALUE
|
|
RTRUE
|
|
?CND33: FSET? OBJ,SECRETBIT \?CCL42
|
|
CALL NOT-FOUND,OBJ
|
|
RTRUE
|
|
?CCL42: ZERO? PRSO? /?CCL44
|
|
SET 'PRSO,OBJ
|
|
RFALSE
|
|
?CCL44: SET 'PRSI,OBJ
|
|
RFALSE
|
|
?CCL30: LESS? 1,M-F \?CCL46
|
|
GETB TBL,1 >OBJ
|
|
GETP OBJ,P?GENERIC
|
|
CALL STACK,TBL,M-F >OBJ
|
|
ZERO? OBJ /?CCL46
|
|
EQUAL? OBJ,NOT-HERE-OBJECT /TRUE
|
|
FSET? OBJ,SECRETBIT \?CCL53
|
|
CALL NOT-FOUND,OBJ
|
|
RTRUE
|
|
?CCL53: ZERO? PRSO? /?CCL55
|
|
SET 'PRSO,OBJ
|
|
RFALSE
|
|
?CCL55: SET 'PRSI,OBJ
|
|
RFALSE
|
|
?CCL46: ZERO? PRSO? \?PRD59
|
|
IN? PRSO,HERE \?PRD59
|
|
EQUAL? PRSA,V?TELL-ABOUT,V?ASK-FOR,V?ASK-ABOUT /?CTR56
|
|
?PRD59: ZERO? PRSO? /?PRD63
|
|
CALL QCONTEXT-GOOD?
|
|
ZERO? STACK /?PRD63
|
|
EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /?CTR56
|
|
?PRD63: EQUAL? WINNER,PLAYER /?CCL57
|
|
EQUAL? PRSA,V?SGIVE,V?GIVE,V?FIND \?CCL57
|
|
?CTR56: SET 'LEN,FALSE-VALUE
|
|
EQUAL? WINNER,PLAYER /?CCL71
|
|
SET 'LEN,WINNER
|
|
JUMP ?CND69
|
|
?CCL71: EQUAL? PRSA,V?TELL-ABOUT,V?ASK-FOR,V?ASK-ABOUT \?CCL73
|
|
SET 'LEN,PRSO
|
|
JUMP ?CND69
|
|
?CCL73: CALL QCONTEXT-GOOD?
|
|
ZERO? STACK /?CND69
|
|
SET 'LEN,QCONTEXT
|
|
?CND69: EQUAL? LEN,0,PLAYER /?PRG79
|
|
CALL START-SENTENCE,LEN
|
|
PRINTI " looks confused. "
|
|
?PRG79: PRINTI """I don't know wh"
|
|
ZERO? M-F \?PRG86
|
|
PRINTI "at you mean by"
|
|
CALL NOT-HERE-PRINT
|
|
JUMP ?PRG90
|
|
?PRG86: PRINTI "ich"
|
|
CALL NOT-HERE-PRINT
|
|
PRINTI " you mean"
|
|
?PRG90: PRINTR "!"""
|
|
?CCL57: ZERO? PRSO? \?CCL93
|
|
CALL HE-SHE-IT,WINNER,TRUE-VALUE
|
|
PRINTI " wouldn't find"
|
|
CALL CAPITAL-NOUN?,P-XNAM
|
|
ZERO? STACK \?CND96
|
|
PRINTI " any"
|
|
?CND96: CALL NOT-HERE-PRINT
|
|
PRINTR " there."
|
|
?CCL93: RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT NOT-HERE-PRINT
|
|
ZERO? P-OFLAG \?CTR2
|
|
ZERO? P-MERGED /?CCL3
|
|
?CTR2: ZERO? P-XADJ /?CND6
|
|
PRINTC 32
|
|
PRINTB P-XADJN
|
|
?CND6: ZERO? P-XNAM /FALSE
|
|
PRINTC 32
|
|
PRINTB P-XNAM
|
|
RTRUE
|
|
?CCL3: EQUAL? PRSO,NOT-HERE-OBJECT \?CCL16
|
|
CALL CLAUSE-PRINT,P-NC1,P-NC1L,FALSE-VALUE
|
|
RSTACK
|
|
?CCL16: CALL CLAUSE-PRINT,P-NC2,P-NC2L,FALSE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEE-VERB?
|
|
EQUAL? PRSA,V?SSEARCH-FOR,V?SEARCH-FOR,V?SEARCH /TRUE
|
|
EQUAL? PRSA,V?READ,V?LOOK-UP,V?LOOK-UNDER /TRUE
|
|
EQUAL? PRSA,V?LOOK-THROUGH,V?LOOK-OUTSIDE,V?LOOK-ON /TRUE
|
|
EQUAL? PRSA,V?LOOK-INSIDE,V?LOOK-DOWN,V?LOOK-BEHIND /TRUE
|
|
EQUAL? PRSA,V?LOOK,V?FIND,V?EXAMINE /TRUE
|
|
EQUAL? PRSA,V?CHASTISE,V?SANALYZE,V?ANALYZE /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT FIX-HIM-HER-IT,PRON,OBJ
|
|
ZERO? OBJ /?CTR2
|
|
CALL ACCESSIBLE?,OBJ
|
|
ZERO? STACK \?CCL3
|
|
EQUAL? PRON,PRSI \?PRD9
|
|
CALL PRSI-VERB?
|
|
ZERO? STACK /?CTR2
|
|
?PRD9: EQUAL? PRON,PRSO \?CCL3
|
|
CALL PRSO-VERB?
|
|
ZERO? STACK \?CCL3
|
|
?CTR2: EQUAL? 0,OBJ,PRSI \?CCL16
|
|
CALL FAKE-ORPHAN
|
|
RFALSE
|
|
?CCL16: CALL NOT-HERE,OBJ
|
|
RFALSE
|
|
?CCL3: EQUAL? PRSO,PRON \?CND17
|
|
EQUAL? PRON,IT \?CND19
|
|
GET P-IT-WORDS,0
|
|
PUT P-ADJW,0,STACK
|
|
GET P-IT-WORDS,1
|
|
PUT P-NAMW,0,STACK
|
|
?CND19: SET 'PRSO,OBJ
|
|
CALL TELL-I-ASSUME,OBJ
|
|
?CND17: EQUAL? PRSI,PRON \TRUE
|
|
EQUAL? PRON,IT \?CND23
|
|
GET P-IT-WORDS,0
|
|
PUT P-ADJW,1,STACK
|
|
GET P-IT-WORDS,1
|
|
PUT P-NAMW,1,STACK
|
|
?CND23: SET 'PRSI,OBJ
|
|
CALL TELL-I-ASSUME,OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FAKE-ORPHAN,TMP
|
|
CALL ORPHAN,P-SYNTAX,FALSE-VALUE
|
|
PRINTI "[Please be specific: wh"
|
|
GETB P-SYNTAX,P-SFWIM1
|
|
EQUAL? STACK,PERSONBIT \?PRG8
|
|
PRINTI "om"
|
|
JUMP ?PRG10
|
|
?PRG8: PRINTI "at"
|
|
?PRG10: PRINTI " do you want to "
|
|
CALL VERB-PRINT
|
|
SET 'P-OFLAG,TRUE-VALUE
|
|
SET 'P-WON,FALSE-VALUE
|
|
PRINTR "?]"
|
|
|
|
|
|
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI,X
|
|
SET 'OA,PRSA
|
|
SET 'OO,PRSO
|
|
SET 'OI,PRSI
|
|
SET 'PRSA,A
|
|
SET 'PRSI,I
|
|
SET 'PRSO,O
|
|
ZERO? LIT \?CCL3
|
|
CALL SEE-VERB?
|
|
ZERO? STACK /?CCL3
|
|
CALL TOO-DARK
|
|
RETURN 2
|
|
?CCL3: EQUAL? PRSA,V?WALK /?CND1
|
|
EQUAL? IT,PRSI,PRSO \?CND9
|
|
CALL FIX-HIM-HER-IT,IT,P-IT-OBJECT
|
|
ZERO? STACK \?CND9
|
|
RETURN 2
|
|
?CND9: EQUAL? HER,PRSI,PRSO \?CND15
|
|
CALL FIX-HIM-HER-IT,HER,P-HER-OBJECT
|
|
ZERO? STACK \?CND15
|
|
RETURN 2
|
|
?CND15: EQUAL? HIM,PRSI,PRSO \?CND1
|
|
CALL FIX-HIM-HER-IT,HIM,P-HIM-OBJECT
|
|
ZERO? STACK \?CND1
|
|
RETURN 2
|
|
?CND1: SET 'V,FALSE-VALUE
|
|
EQUAL? A,V?WALK /?CND27
|
|
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CND27
|
|
CALL D-APPLY,STR?9,NOT-HERE-OBJECT-F >V
|
|
ZERO? V /?CND27
|
|
SET 'P-WON,FALSE-VALUE
|
|
?CND27: CALL THIS-IS-IT,PRSI
|
|
CALL THIS-IS-IT,PRSO
|
|
EQUAL? WINNER,PLAYER /?CND33
|
|
CALL THIS-IS-IT,WINNER
|
|
?CND33: SET 'O,PRSO
|
|
SET 'I,PRSI
|
|
ZERO? V \?CND35
|
|
GETP WINNER,P?ACTION
|
|
CALL D-APPLY,STR?10,STACK,M-WINNER >V
|
|
?CND35: ZERO? V \?CND37
|
|
IN? WINNER,CAR \?CCL41
|
|
PUSH CAR
|
|
JUMP ?CND39
|
|
?CCL41: PUSH HERE
|
|
?CND39: GETP STACK,P?ACTION
|
|
CALL D-APPLY,STR?11,STACK,M-BEG >V
|
|
?CND37: ZERO? V \?CND42
|
|
GET PREACTIONS,A
|
|
CALL D-APPLY,STR?12,STACK >V
|
|
?CND42: SET 'NOW-PRSI,1
|
|
ZERO? V \?CND44
|
|
ZERO? I /?CND44
|
|
GETP I,P?ACTION
|
|
CALL D-APPLY,STR?13,STACK >V
|
|
?CND44: SET 'NOW-PRSI,0
|
|
ZERO? V \?CND48
|
|
ZERO? O /?CND48
|
|
EQUAL? A,V?WALK /?CND48
|
|
GETP O,P?ACTION
|
|
CALL D-APPLY,STR?14,STACK >V
|
|
?CND48: ZERO? V \?CND53
|
|
GET ACTIONS,A
|
|
CALL D-APPLY,FALSE-VALUE,STACK >V
|
|
?CND53: SET 'PRSA,OA
|
|
SET 'PRSO,OO
|
|
SET 'PRSI,OI
|
|
RETURN V
|
|
|
|
|
|
.FUNCT D-APPLY,STR,FCN,FOO=0,RES
|
|
ZERO? FCN /FALSE
|
|
EQUAL? STR,STR?15 \?CND4
|
|
SET 'FOO,M-CONT
|
|
?CND4: ZERO? FOO /?CCL8
|
|
CALL FCN,FOO >RES
|
|
RETURN RES
|
|
?CCL8: CALL FCN >RES
|
|
RETURN RES
|
|
|
|
|
|
.FUNCT I-PROMPT,GARG=0
|
|
DEC 'P-PROMPT
|
|
RFALSE
|
|
|
|
|
|
.FUNCT BUZZER-WORD?,WRD,PTR
|
|
CALL QUESTION-WORD?,WRD
|
|
ZERO? STACK \?CCL3
|
|
CALL NAUGHTY-WORD?,WRD
|
|
ZERO? STACK \?CCL3
|
|
CALL NUMBER-WORD?,WRD
|
|
ZERO? STACK /FALSE
|
|
?CCL3: PUT OOPS-TABLE,O-PTR,PTR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT QUESTION-WORD?,WORD,DO-IT=0
|
|
EQUAL? WORD,W?(SOME \?CCL3
|
|
PRINTI "[Type a real word instead of"
|
|
PRINT SOMETHING
|
|
RTRUE
|
|
?CCL3: EQUAL? WORD,W?WHERE \?CCL7
|
|
CALL TO-DO-X-USE-Y,STR?17,STR?18
|
|
RTRUE
|
|
?CCL7: EQUAL? WORD,W?WHAT,W?WHO,W?WHEN /?CTR8
|
|
EQUAL? WORD,W?WHY \?CCL9
|
|
?CTR8: CALL TO-DO-X-USE-Y,STR?19,STR?20
|
|
RTRUE
|
|
?CCL9: ZERO? DO-IT \?PRG16
|
|
CALL ZMEMQ,WORD,QUESTION-WORD-TABLE
|
|
ZERO? STACK /FALSE
|
|
?PRG16: PRINTI "[Please use commands"
|
|
INC 'QUESTION-WORD-COUNT
|
|
MOD QUESTION-WORD-COUNT,4
|
|
ZERO? STACK \?PRG23
|
|
PRINTI " to tell the computer what you want to do in the story. Here are some commands:
|
|
GO TO MY ROOM
|
|
LOOK UNDER THE RUG
|
|
MADAM, DESCRIBE THE GHOST
|
|
Now you can try again"
|
|
JUMP ?PRG25
|
|
?PRG23: PRINTI ", not statements or questions"
|
|
?PRG25: PRINTR ".]"
|
|
|
|
|
|
.FUNCT TO-DO-X-USE-Y,STR1,STR2
|
|
PRINTI "[To "
|
|
PRINT STR1
|
|
PRINTI " something, use the command: "
|
|
PRINT STR2
|
|
PRINT SOMETHING
|
|
RTRUE
|
|
|
|
|
|
.FUNCT NUMBER-WORD?,WRD
|
|
CALL ZMEMQ,WRD,NUMBER-WORD-TABLE
|
|
ZERO? STACK /FALSE
|
|
PRINTR "[Use numerals for numbers, for example ""10.""]"
|
|
|
|
|
|
.FUNCT NAUGHTY-WORD?,WORD
|
|
CALL ZMEMQ,WORD,NAUGHTY-WORD-TABLE
|
|
ZERO? STACK /FALSE
|
|
PRINTC 91
|
|
CALL PICK-ONE-NEW,OFFENDED
|
|
PRINT STACK
|
|
PRINTC 93
|
|
CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT NOT-THAT-WAY,STR
|
|
PRINTI "[You can't use "
|
|
PRINT STR
|
|
PRINTR " that way.]"
|
|
|
|
|
|
.FUNCT PARSER,PTR=P-LEXSTART,WRD,VAL=0,VERB=0,OF-FLAG=0,LEN,DIR=0,NW=0,LW=0,CNT=-1,OMERGED,OWINNER,TMP,?TMP1,?TMP2
|
|
?PRG1: IGRTR? 'CNT,P-ITBLLEN /?REP2
|
|
ZERO? P-OFLAG \?CND6
|
|
GET P-ITBL,CNT
|
|
PUT P-OTBL,CNT,STACK
|
|
?CND6: PUT P-ITBL,CNT,0
|
|
JUMP ?PRG1
|
|
?REP2: SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
SET 'P-XNAM,FALSE-VALUE
|
|
SET 'P-XADJ,FALSE-VALUE
|
|
SET 'P-XADJN,FALSE-VALUE
|
|
ZERO? P-OFLAG \?CND8
|
|
PUT P-NAMW,0,FALSE-VALUE
|
|
PUT P-NAMW,1,FALSE-VALUE
|
|
PUT P-ADJW,0,FALSE-VALUE
|
|
PUT P-ADJW,1,FALSE-VALUE
|
|
PUT P-OFW,0,FALSE-VALUE
|
|
PUT P-OFW,1,FALSE-VALUE
|
|
?CND8: SET 'P-PRSA-WORD,FALSE-VALUE
|
|
SET 'OMERGED,P-MERGED
|
|
SET 'P-MERGED,FALSE-VALUE
|
|
SET 'P-END-ON-PREP,FALSE-VALUE
|
|
PUTB P-PRSO,P-MATCHLEN,0
|
|
PUTB P-PRSI,P-MATCHLEN,0
|
|
PUTB P-BUTS,P-MATCHLEN,0
|
|
SET 'OWINNER,WINNER
|
|
ZERO? QUOTE-FLAG \?CND10
|
|
EQUAL? WINNER,PLAYER /?CND10
|
|
SET 'WINNER,PLAYER
|
|
LOC WINNER
|
|
FSET? STACK,VEHBIT /?CND14
|
|
LOC WINNER >HERE
|
|
?CND14: CALL LIT? >LIT
|
|
?CND10: ZERO? RESERVE-PTR /?CCL18
|
|
SET 'PTR,RESERVE-PTR
|
|
CALL STUFF,P-LEXV,RESERVE-LEXV
|
|
CALL INBUF-STUFF,P-INBUF,RESERVE-INBUF
|
|
ZERO? VERBOSITY /?CND19
|
|
EQUAL? PLAYER,WINNER \?CND19
|
|
CRLF
|
|
?CND19: SET 'RESERVE-PTR,FALSE-VALUE
|
|
JUMP ?CND16
|
|
?CCL18: ZERO? P-CONT /?CCL24
|
|
SET 'PTR,P-CONT
|
|
ZERO? VERBOSITY /?CND16
|
|
EQUAL? PLAYER,WINNER \?CND16
|
|
CRLF
|
|
JUMP ?CND16
|
|
?CCL24: SET 'WINNER,PLAYER
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
GET OOPS-TABLE,O-PTR
|
|
ZERO? STACK \?CND29
|
|
PUT OOPS-TABLE,O-END,FALSE-VALUE
|
|
?CND29: LOC WINNER
|
|
FSET? STACK,VEHBIT /?CND31
|
|
LOC WINNER >HERE
|
|
?CND31: CALL LIT? >LIT
|
|
FCLEAR IT,TOUCHBIT
|
|
FCLEAR HER,TOUCHBIT
|
|
FCLEAR HIM,TOUCHBIT
|
|
ZERO? VERBOSITY /?CND33
|
|
CRLF
|
|
?CND33: ZERO? P-PROMPT /?PRG51
|
|
ZERO? P-OFLAG \?PRG51
|
|
ZERO? AWAITING-REPLY \?PRG51
|
|
EQUAL? P-PROMPT,P-PROMPT-START \?CCL42
|
|
PRINTI "What would you like to do?"
|
|
JUMP ?CND40
|
|
?CCL42: DLESS? 'P-PROMPT,1 \?PRG49
|
|
PRINTI "[You won't see ""What next?"" any more.]
|
|
"
|
|
JUMP ?CND40
|
|
?PRG49: PRINTI "What next?"
|
|
?CND40: CRLF
|
|
?PRG51: PRINTC 62
|
|
READ P-INBUF,P-LEXV
|
|
?CND16: GETB P-LEXV,P-LEXWORDS >P-LEN
|
|
GET P-LEXV,PTR
|
|
EQUAL? W?QUOTE,STACK \?CND53
|
|
CALL QCONTEXT-GOOD?
|
|
ZERO? STACK /?CND53
|
|
ADD PTR,P-LEXELEN >PTR
|
|
DEC 'P-LEN
|
|
?CND53: GET P-LEXV,PTR
|
|
EQUAL? W?THEN,STACK \?CND57
|
|
ADD PTR,P-LEXELEN >PTR
|
|
DEC 'P-LEN
|
|
?CND57: LESS? 1,P-LEN \?CND59
|
|
GET P-LEXV,PTR
|
|
EQUAL? STACK,W?YOU \?CND59
|
|
ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >NW
|
|
ZERO? NW /?CND59
|
|
CALL WT?,NW,64
|
|
ZERO? STACK /?CND59
|
|
ADD PTR,P-LEXELEN >PTR
|
|
DEC 'P-LEN
|
|
?CND59: LESS? 1,P-LEN \?CND65
|
|
GET P-LEXV,PTR
|
|
EQUAL? STACK,W?GO,W?TO \?CND65
|
|
ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >NW
|
|
ZERO? NW /?CND65
|
|
CALL WT?,NW,64
|
|
ZERO? STACK /?CND65
|
|
ADD PTR,P-LEXELEN >PTR
|
|
DEC 'P-LEN
|
|
?CND65: ZERO? P-LEN \?CCL73
|
|
PRINTC 91
|
|
PRINT BEG-PARDON
|
|
PRINTC 93
|
|
CRLF
|
|
RFALSE
|
|
?CCL73: GET P-LEXV,PTR
|
|
EQUAL? STACK,W?OOPS \?CCL77
|
|
ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK
|
|
EQUAL? STACK,W?PERIOD,W?COMMA,W?! \?CND78
|
|
ADD PTR,P-LEXELEN >PTR
|
|
DEC 'P-LEN
|
|
?CND78: GRTR? P-LEN,1 /?CCL82
|
|
CALL NOT-THAT-WAY,STR?28
|
|
RFALSE
|
|
?CCL82: GET OOPS-TABLE,O-PTR >VAL
|
|
ZERO? VAL /?CCL84
|
|
GRTR? P-LEN,2 \?CND85
|
|
PRINTI "[Warning: only the first word after OOPS is used.]"
|
|
CRLF
|
|
?CND85: ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK
|
|
PUT AGAIN-LEXV,VAL,STACK
|
|
SET 'WINNER,OWINNER
|
|
MUL PTR,P-LEXELEN
|
|
ADD STACK,6 >PTR
|
|
GETB P-LEXV,PTR >?TMP2
|
|
ADD PTR,1
|
|
GETB P-LEXV,STACK >?TMP1
|
|
MUL VAL,P-LEXELEN
|
|
ADD STACK,3
|
|
CALL INBUF-ADD,?TMP2,?TMP1,STACK
|
|
CALL STUFF,P-LEXV,AGAIN-LEXV
|
|
GETB P-LEXV,P-LEXWORDS >P-LEN
|
|
GET OOPS-TABLE,O-START >PTR
|
|
CALL INBUF-STUFF,P-INBUF,OOPS-INBUF
|
|
SET 'OOPS-PRINT,TRUE-VALUE
|
|
CALL PRINT-LEXV,PTR
|
|
SET 'OOPS-PRINT,FALSE-VALUE
|
|
JUMP ?CND71
|
|
?CCL84: PUT OOPS-TABLE,O-END,FALSE-VALUE
|
|
PRINTI "[There was no word to replace!]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL77: ZERO? P-CONT \?CND71
|
|
PUT OOPS-TABLE,O-END,FALSE-VALUE
|
|
?CND71: SET 'P-CONT,FALSE-VALUE
|
|
GET P-LEXV,PTR
|
|
EQUAL? STACK,W?AGAIN,W?G \?CCL95
|
|
GETB OOPS-INBUF,1
|
|
ZERO? STACK \?CCL98
|
|
PRINTI "[What do you want to do again?]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL98: ZERO? P-OFLAG /?CCL102
|
|
CALL NOT-THAT-WAY,STR?29
|
|
RFALSE
|
|
?CCL102: ZERO? P-WON \?CCL104
|
|
PRINTI "[That would just repeat a mistake!]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL104: GRTR? P-LEN,1 \?CCL108
|
|
ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >CNT
|
|
EQUAL? CNT,W?PERIOD,W?COMMA,W?THEN /?CTR110
|
|
EQUAL? CNT,W?AND,W?!,W?? \?CCL111
|
|
?CTR110: ADD PTR,4 >PTR
|
|
GETB P-LEXV,P-LEXWORDS
|
|
SUB STACK,2
|
|
PUTB P-LEXV,P-LEXWORDS,STACK
|
|
JUMP ?CND96
|
|
?CCL111: CALL DONT-UNDERSTAND
|
|
RFALSE
|
|
?CCL108: ADD PTR,P-LEXELEN >PTR
|
|
GETB P-LEXV,P-LEXWORDS
|
|
SUB STACK,1
|
|
PUTB P-LEXV,P-LEXWORDS,STACK
|
|
?CND96: GETB P-LEXV,P-LEXWORDS
|
|
GRTR? STACK,0 \?CCL116
|
|
CALL STUFF,RESERVE-LEXV,P-LEXV
|
|
CALL INBUF-STUFF,RESERVE-INBUF,P-INBUF
|
|
SET 'RESERVE-PTR,PTR
|
|
JUMP ?CND114
|
|
?CCL116: SET 'RESERVE-PTR,FALSE-VALUE
|
|
?CND114: SET 'WINNER,OWINNER
|
|
SET 'P-MERGED,OMERGED
|
|
CALL INBUF-STUFF,P-INBUF,OOPS-INBUF
|
|
CALL STUFF,P-LEXV,AGAIN-LEXV
|
|
SET 'CNT,-1
|
|
SET 'DIR,AGAIN-DIR
|
|
?PRG117: IGRTR? 'CNT,P-ITBLLEN /?CND93
|
|
GET P-OTBL,CNT
|
|
PUT P-ITBL,CNT,STACK
|
|
JUMP ?PRG117
|
|
?CCL95: SET 'P-NUMBER,-1
|
|
GETB P-LEXV,P-LEXWORDS
|
|
MUL P-LEXELEN,STACK
|
|
ADD PTR,STACK >LEN
|
|
CALL FIX-POSSESSIVES,PTR,LEN
|
|
EQUAL? TRUE-VALUE,STACK /FALSE
|
|
CALL STUFF,AGAIN-LEXV,P-LEXV
|
|
CALL INBUF-STUFF,OOPS-INBUF,P-INBUF
|
|
PUT OOPS-TABLE,O-START,PTR
|
|
MUL 4,P-LEN
|
|
PUT OOPS-TABLE,O-LENGTH,STACK
|
|
GET OOPS-TABLE,O-END
|
|
ZERO? STACK \?CND124
|
|
MUL 2,LEN >LEN
|
|
SUB LEN,1
|
|
GETB P-LEXV,STACK >?TMP1
|
|
SUB LEN,2
|
|
GETB P-LEXV,STACK
|
|
ADD ?TMP1,STACK
|
|
PUT OOPS-TABLE,O-END,STACK
|
|
?CND124: SET 'RESERVE-PTR,FALSE-VALUE
|
|
SET 'LEN,P-LEN
|
|
SET 'P-DIRECTION,FALSE-VALUE
|
|
SET 'P-NCN,0
|
|
SET 'P-GETFLAGS,0
|
|
PUT P-ITBL,P-VERBN,0
|
|
?PRG126: DLESS? 'P-LEN,0 \?CCL130
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
JUMP ?CND93
|
|
?CCL130: GET P-LEXV,PTR >WRD
|
|
ZERO? WRD \?CTR131
|
|
CALL NUMBER?,PTR >WRD
|
|
ZERO? WRD \?CTR131
|
|
CALL NAME?,PTR >WRD
|
|
ZERO? WRD /?CCL132
|
|
?CTR131: ZERO? P-LEN \?CCL138
|
|
SET 'NW,0
|
|
JUMP ?CND136
|
|
?CCL138: ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >NW
|
|
?CND136: EQUAL? WRD,W?TO \?CCL141
|
|
EQUAL? VERB,ACT?TELL,ACT?ASK \?CCL141
|
|
PUT P-ITBL,P-VERB,ACT?TELL
|
|
SET 'WRD,W?QUOTE
|
|
JUMP ?CND139
|
|
?CCL141: EQUAL? WRD,W?THEN \?CND139
|
|
GRTR? P-LEN,0 \?CND139
|
|
ZERO? VERB \?CND139
|
|
ZERO? QUOTE-FLAG \?CND139
|
|
PUT P-ITBL,P-VERB,ACT?TELL
|
|
PUT P-ITBL,P-VERBN,0
|
|
SET 'WRD,W?QUOTE
|
|
?CND139: EQUAL? WRD,W?PERIOD \?CCL151
|
|
EQUAL? LW,W?MRS,W?MR,W?MS /?CTR150
|
|
EQUAL? LW,W?DR \?CCL151
|
|
?CTR150: SET 'LW,0
|
|
JUMP ?CND128
|
|
?CCL151: EQUAL? WRD,W?THEN,W?PERIOD,W?QUOTE /?CTR156
|
|
EQUAL? WRD,W?!,W?? \?CCL157
|
|
?CTR156: EQUAL? WRD,W?QUOTE \?CND160
|
|
ZERO? QUOTE-FLAG /?CCL164
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
JUMP ?CND160
|
|
?CCL164: SET 'QUOTE-FLAG,TRUE-VALUE
|
|
?CND160: ZERO? P-LEN /?PEN165
|
|
ADD PTR,P-LEXELEN >P-CONT
|
|
?PEN165: PUTB P-LEXV,P-LEXWORDS,P-LEN
|
|
JUMP ?CND93
|
|
?CCL157: CALL WT?,WRD,16,3 >VAL
|
|
ZERO? VAL /?CCL168
|
|
EQUAL? VERB,FALSE-VALUE,ACT?HEAD \?CCL168
|
|
EQUAL? LEN,1 /?CTR167
|
|
EQUAL? LEN,2 \?PRD174
|
|
EQUAL? VERB,ACT?HEAD /?CTR167
|
|
?PRD174: EQUAL? NW,W?THEN,W?PERIOD,W?QUOTE \?PRD177
|
|
GRTR? LEN,1 /?CTR167
|
|
?PRD177: EQUAL? NW,W?!,W?? \?PRD180
|
|
GRTR? LEN,1 /?CTR167
|
|
?PRD180: ZERO? QUOTE-FLAG /?PRD183
|
|
EQUAL? LEN,2 \?PRD183
|
|
EQUAL? NW,W?QUOTE /?CTR167
|
|
?PRD183: GRTR? LEN,2 \?CCL168
|
|
EQUAL? NW,W?COMMA,W?AND \?CCL168
|
|
?CTR167: SET 'DIR,VAL
|
|
EQUAL? NW,W?COMMA,W?AND \?CND189
|
|
ADD PTR,P-LEXELEN
|
|
CALL CHANGE-LEXV,STACK,W?THEN
|
|
?CND189: GRTR? LEN,2 /?CND128
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
JUMP ?CND93
|
|
?CCL168: CALL WT?,WRD,64,1 >VAL
|
|
ZERO? VAL /?CCL194
|
|
ZERO? VERB \?CCL194
|
|
ZERO? P-OFLAG \?CND197
|
|
SET 'P-PRSA-WORD,WRD
|
|
?CND197: SET 'VERB,VAL
|
|
PUT P-ITBL,P-VERB,VAL
|
|
PUT P-ITBL,P-VERBN,P-VTBL
|
|
PUT P-VTBL,0,WRD
|
|
MUL PTR,2
|
|
ADD STACK,2 >TMP
|
|
GETB P-LEXV,TMP
|
|
PUTB P-VTBL,2,STACK
|
|
ADD TMP,1
|
|
GETB P-LEXV,STACK
|
|
PUTB P-VTBL,3,STACK
|
|
JUMP ?CND128
|
|
?CCL194: CALL WT?,WRD,8,0 >VAL
|
|
ZERO? VAL \?CTR199
|
|
EQUAL? WRD,W?ALL,W?ONE,W?A /?CTR199
|
|
CALL WT?,WRD,32
|
|
ZERO? STACK \?CTR199
|
|
CALL WT?,WRD,128
|
|
ZERO? STACK /?CCL200
|
|
?CTR199: GRTR? P-LEN,1 \?CCL209
|
|
EQUAL? NW,W?OF \?CCL209
|
|
ZERO? VAL \?CCL209
|
|
EQUAL? WRD,W?ALL,W?ONE,W?A /?CCL209
|
|
PUT P-OFW,P-NCN,WRD
|
|
SET 'OF-FLAG,TRUE-VALUE
|
|
JUMP ?CND128
|
|
?CCL209: ZERO? VAL /?CCL215
|
|
ZERO? P-LEN /?CTR214
|
|
EQUAL? NW,W?THEN,W?PERIOD /?CTR214
|
|
EQUAL? NW,W?!,W?? \?CCL215
|
|
?CTR214: SET 'P-END-ON-PREP,TRUE-VALUE
|
|
LESS? P-NCN,2 \?CND128
|
|
PUT P-ITBL,P-PREP1,VAL
|
|
PUT P-ITBL,P-PREP1N,WRD
|
|
JUMP ?CND128
|
|
?CCL215: EQUAL? P-NCN,2 \?CCL224
|
|
PRINTI "[I found too many nouns in that sentence!]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL224: INC 'P-NCN
|
|
CALL CLAUSE,PTR,VAL,WRD >PTR
|
|
ZERO? PTR /FALSE
|
|
LESS? PTR,0 \?CND128
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
?CND93: PUT OOPS-TABLE,O-PTR,FALSE-VALUE
|
|
ZERO? DIR /?CND249
|
|
SET 'PRSA,V?WALK
|
|
SET 'P-WALK-DIR,DIR
|
|
SET 'AGAIN-DIR,DIR
|
|
SET 'PRSO,DIR
|
|
SET 'P-OFLAG,FALSE-VALUE
|
|
RTRUE
|
|
?CCL200: EQUAL? WRD,W?OF \?CCL232
|
|
ZERO? OF-FLAG /?CTR234
|
|
EQUAL? NW,W?PERIOD,W?THEN /?CTR234
|
|
EQUAL? NW,W?!,W?? \?CCL235
|
|
?CTR234: CALL CANT-USE,PTR
|
|
RFALSE
|
|
?CCL235: SET 'OF-FLAG,FALSE-VALUE
|
|
?CND128: SET 'LW,WRD
|
|
ADD PTR,P-LEXELEN >PTR
|
|
JUMP ?PRG126
|
|
?CCL232: CALL WT?,WRD,4
|
|
ZERO? STACK /?CCL240
|
|
CALL BUZZER-WORD?,WRD,PTR
|
|
ZERO? STACK /?CND128
|
|
RFALSE
|
|
?CCL240: EQUAL? VERB,ACT?TELL \?CCL244
|
|
CALL WT?,WRD,64
|
|
ZERO? STACK /?CCL244
|
|
PRINTI "[Please consult your manual on how to talk to people.]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL244: CALL CANT-USE,PTR
|
|
RFALSE
|
|
?CCL132: CALL UNKNOWN-WORD,PTR
|
|
RFALSE
|
|
?CND249: SET 'P-WALK-DIR,FALSE-VALUE
|
|
SET 'AGAIN-DIR,FALSE-VALUE
|
|
ZERO? P-OFLAG /?CND251
|
|
CALL ORPHAN-MERGE
|
|
ZERO? STACK /?CND251
|
|
SET 'WINNER,OWINNER
|
|
?CND251: GET P-ITBL,P-VERB
|
|
ZERO? STACK \?CND255
|
|
SUB PTR,P-LEXELEN >PTR
|
|
SET 'TMP,FALSE-VALUE
|
|
GRTR? PTR,0 \?CND257
|
|
GET P-LEXV,PTR >TMP
|
|
?CND257: EQUAL? TMP,W?PLEASE \?CCL261
|
|
PUT P-ITBL,P-VERB,ACT?YES
|
|
JUMP ?CND255
|
|
?CCL261: EQUAL? TMP,W?PERIOD \?CCL263
|
|
CALL MISSING,STR?30
|
|
RFALSE
|
|
?CCL263: PUT P-ITBL,P-VERB,ACT?$CALL
|
|
?CND255: CALL SYNTAX-CHECK
|
|
ZERO? STACK /FALSE
|
|
CALL SNARF-OBJECTS
|
|
ZERO? STACK /FALSE
|
|
CALL MANY-CHECK
|
|
ZERO? STACK /FALSE
|
|
CALL TAKE-CHECK
|
|
ZERO? STACK \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT CHANGE-LEXV,PTR,WRD
|
|
PUT P-LEXV,PTR,WRD
|
|
PUT AGAIN-LEXV,PTR,WRD
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRINT-LEXV,PTR,X
|
|
PRINT I-ASSUME
|
|
MUL 2,PTR
|
|
ADD P-LEXV,STACK >X
|
|
MUL P-WORDLEN,P-LEN
|
|
ADD X,STACK
|
|
CALL BUFFER-PRINT,X,STACK,FALSE-VALUE
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT STUFF,DEST,SRC,MAX=29,PTR=P-LEXSTART,CTR=1,BPTR
|
|
GETB SRC,0
|
|
PUTB DEST,0,STACK
|
|
GETB SRC,1
|
|
PUTB DEST,1,STACK
|
|
?PRG1: GET SRC,PTR
|
|
PUT DEST,PTR,STACK
|
|
MUL PTR,2
|
|
ADD STACK,2 >BPTR
|
|
GETB SRC,BPTR
|
|
PUTB DEST,BPTR,STACK
|
|
MUL PTR,2
|
|
ADD STACK,3 >BPTR
|
|
GETB SRC,BPTR
|
|
PUTB DEST,BPTR,STACK
|
|
ADD PTR,P-LEXELEN >PTR
|
|
IGRTR? 'CTR,MAX \?PRG1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT INBUF-STUFF,DEST,SRC,CNT=80
|
|
?PRG1: DLESS? 'CNT,0 /TRUE
|
|
GETB SRC,CNT
|
|
PUTB DEST,CNT,STACK
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT INBUF-ADD,LEN,BEG,SLOT,DBEG,CTR=0,TMP,?TMP1
|
|
GET OOPS-TABLE,O-END >TMP
|
|
ZERO? TMP /?CCL3
|
|
SET 'DBEG,TMP
|
|
JUMP ?CND1
|
|
?CCL3: GET OOPS-TABLE,O-LENGTH >TMP
|
|
GETB AGAIN-LEXV,TMP >?TMP1
|
|
ADD TMP,1
|
|
GETB AGAIN-LEXV,STACK
|
|
ADD ?TMP1,STACK >DBEG
|
|
?CND1: ADD DBEG,LEN
|
|
PUT OOPS-TABLE,O-END,STACK
|
|
?PRG4: ADD DBEG,CTR >?TMP1
|
|
ADD BEG,CTR
|
|
GETB P-INBUF,STACK
|
|
PUTB OOPS-INBUF,?TMP1,STACK
|
|
INC 'CTR
|
|
EQUAL? CTR,LEN \?PRG4
|
|
PUTB AGAIN-LEXV,SLOT,DBEG
|
|
SUB SLOT,1
|
|
PUTB AGAIN-LEXV,STACK,LEN
|
|
RTRUE
|
|
|
|
|
|
.FUNCT FIX-POSSESSIVES,START,END,WHERE=0,PTR,N,PNAM,PADJ,VAL=0,X
|
|
SET 'PNAM,P-NAM
|
|
SET 'PADJ,P-ADJ
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'PTR,END
|
|
?PRG1: SUB PTR,P-LEXELEN >PTR
|
|
EQUAL? PTR,START /?REP2
|
|
GET P-LEXV,PTR
|
|
EQUAL? STACK,W?APOSTROPHE \?PRG1
|
|
SUB PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >P-NAM
|
|
SET 'N,RHINO-HEAD-C
|
|
?PRG7: ZERO? P-NAM /?CCL11
|
|
GET CHARACTER-TABLE,N
|
|
CALL THIS-IT?,STACK
|
|
ZERO? STACK /?CCL11
|
|
GET CHARACTER-TABLE,N
|
|
CALL THIS-IS-IT,STACK
|
|
ADD 1,N
|
|
GET CHAR-POSS-TABLE,STACK >VAL
|
|
SUB PTR,WHERE
|
|
CALL CHANGE-LEXV,STACK,VAL
|
|
JUMP ?REP8
|
|
?CCL11: DLESS? 'N,0 \?PRG7
|
|
?REP8: LESS? N,0 \?PRG1
|
|
SUB PTR,P-LEXELEN
|
|
CALL NAME?,STACK
|
|
ZERO? STACK /?CND17
|
|
SUB PTR,WHERE
|
|
CALL CHANGE-LEXV,STACK,W?MY
|
|
JUMP ?PRG1
|
|
?CND17: GET QWP1-TABLE,0 >N
|
|
ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >X
|
|
?PRG19: GET QWP1-TABLE,N
|
|
EQUAL? STACK,P-NAM \?CCL23
|
|
GET QWP2-TABLE,N
|
|
EQUAL? STACK,X \?CCL23
|
|
CALL QUESTION-WORD?,P-NAM,TRUE-VALUE
|
|
RTRUE
|
|
?CCL23: DLESS? 'N,1 /?PRG1
|
|
JUMP ?PRG19
|
|
?REP2: SET 'P-NAM,PNAM
|
|
SET 'P-ADJ,PADJ
|
|
RETURN VAL
|
|
|
|
|
|
.FUNCT NAME?,PTR,?TMP1
|
|
CALL XNAME?,PTR,FIRST-NAME >?TMP1
|
|
ZERO? ?TMP1 /?PRD3
|
|
RETURN ?TMP1
|
|
?PRD3: CALL XNAME?,PTR,LAST-NAME >?TMP1
|
|
ZERO? ?TMP1 /?PRD4
|
|
RETURN ?TMP1
|
|
?PRD4: CALL XNAME?,PTR,FAVE-COLOR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT XNAME?,PTR,TBL,MAX,CNT,BPTR,CHR,N?=1,NCNT=0
|
|
MUL PTR,2
|
|
ADD P-LEXV,STACK >BPTR
|
|
GETB BPTR,2 >CNT
|
|
GRTR? CNT,6 \?CND1
|
|
SET 'CNT,6
|
|
?CND1: GETB BPTR,3 >BPTR
|
|
GETB TBL,0 >MAX
|
|
LESS? MAX,7 /?PRG5
|
|
SET 'MAX,6
|
|
?PRG5: IGRTR? 'NCNT,MAX \?CCL9
|
|
ZERO? CNT /?REP6
|
|
SET 'N?,FALSE-VALUE
|
|
JUMP ?REP6
|
|
?CCL9: DLESS? 'CNT,0 \?CCL13
|
|
SET 'N?,FALSE-VALUE
|
|
?REP6: ZERO? N? /FALSE
|
|
EQUAL? TBL,FIRST-NAME \?CCL23
|
|
CALL CHANGE-LEXV,PTR,W?F.N
|
|
RETURN W?F.N
|
|
?CCL13: GETB P-INBUF,BPTR >CHR
|
|
EQUAL? CHR,45,39,38 /?CND14
|
|
MOD CHR,32
|
|
ADD 96,STACK >CHR
|
|
?CND14: GETB TBL,NCNT
|
|
EQUAL? CHR,STACK /?CND16
|
|
SET 'N?,FALSE-VALUE
|
|
?CND16: INC 'BPTR
|
|
JUMP ?PRG5
|
|
?CCL23: EQUAL? TBL,FAVE-COLOR \?CCL25
|
|
CALL CHANGE-LEXV,PTR,W?F.C
|
|
RETURN W?F.C
|
|
?CCL25: CALL CHANGE-LEXV,PTR,W?L.N
|
|
RETURN W?L.N
|
|
|
|
|
|
.FUNCT WT?,PTR,BIT,B1=5,OFFS=P-P1OFF,TYP
|
|
GETB PTR,P-PSOFF >TYP
|
|
BTST TYP,BIT \FALSE
|
|
GRTR? B1,4 /TRUE
|
|
EQUAL? BIT,128 /TRUE
|
|
BAND TYP,P-P1BITS >TYP
|
|
EQUAL? TYP,B1 /?CND9
|
|
INC 'OFFS
|
|
?CND9: GETB PTR,OFFS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CLAUSE,PTR,VAL,WRD,OFF,NUM,ANDFLG=0,FIRST??=1,NW,LW=0,?TMP1
|
|
SUB P-NCN,1
|
|
MUL STACK,2 >OFF
|
|
ZERO? VAL /?CCL3
|
|
ADD P-PREP1,OFF >NUM
|
|
PUT P-ITBL,NUM,VAL
|
|
ADD NUM,1
|
|
PUT P-ITBL,STACK,WRD
|
|
ADD PTR,P-LEXELEN >PTR
|
|
JUMP ?CND1
|
|
?CCL3: INC 'P-LEN
|
|
?CND1: ZERO? P-LEN \?CND4
|
|
DEC 'P-NCN
|
|
RETURN -1
|
|
?CND4: ADD P-NC1,OFF >NUM
|
|
MUL PTR,2
|
|
ADD P-LEXV,STACK
|
|
PUT P-ITBL,NUM,STACK
|
|
GET P-LEXV,PTR
|
|
EQUAL? STACK,W?THE,W?A,W?AN \?PRG8
|
|
GET P-ITBL,NUM
|
|
ADD STACK,4
|
|
PUT P-ITBL,NUM,STACK
|
|
?PRG8: DLESS? 'P-LEN,0 \?CND10
|
|
ADD NUM,1 >?TMP1
|
|
MUL PTR,2
|
|
ADD P-LEXV,STACK
|
|
PUT P-ITBL,?TMP1,STACK
|
|
RETURN -1
|
|
?CND10: GET P-LEXV,PTR >WRD
|
|
ZERO? WRD \?CTR13
|
|
CALL NUMBER?,PTR >WRD
|
|
ZERO? WRD \?CTR13
|
|
CALL NAME?,PTR >WRD
|
|
ZERO? WRD /?CCL14
|
|
?CTR13: ZERO? P-LEN \?CCL20
|
|
SET 'NW,0
|
|
JUMP ?CND18
|
|
?CCL20: ADD PTR,P-LEXELEN
|
|
GET P-LEXV,STACK >NW
|
|
ZERO? NW \?CND18
|
|
ADD PTR,P-LEXELEN
|
|
CALL NUMBER?,STACK >NW
|
|
?CND18: EQUAL? WRD,W?PERIOD \?CCL25
|
|
EQUAL? LW,W?MRS,W?MR,W?MS /?CTR24
|
|
EQUAL? LW,W?DR \?CCL25
|
|
?CTR24: SET 'LW,0
|
|
JUMP ?CND12
|
|
?CCL25: EQUAL? WRD,W?AND,W?COMMA \?CCL31
|
|
SET 'ANDFLG,TRUE-VALUE
|
|
JUMP ?CND12
|
|
?CCL31: EQUAL? WRD,W?ALL,W?ONE \?CCL33
|
|
EQUAL? NW,W?OF \?CND12
|
|
DEC 'P-LEN
|
|
ADD PTR,P-LEXELEN >PTR
|
|
JUMP ?CND12
|
|
?CCL33: EQUAL? WRD,W?THEN,W?PERIOD /?CTR36
|
|
EQUAL? WRD,W?!,W?? /?CTR36
|
|
CALL WT?,WRD,8
|
|
ZERO? STACK /?CCL37
|
|
GET P-ITBL,P-VERB
|
|
ZERO? STACK /?CCL37
|
|
ZERO? FIRST?? \?CCL37
|
|
?CTR36: INC 'P-LEN
|
|
ADD NUM,1 >?TMP1
|
|
MUL PTR,2
|
|
ADD P-LEXV,STACK
|
|
PUT P-ITBL,?TMP1,STACK
|
|
SUB PTR,P-LEXELEN
|
|
RSTACK
|
|
?CCL37: ZERO? ANDFLG /?CCL45
|
|
GET P-ITBL,P-VERBN
|
|
ZERO? STACK /?CTR44
|
|
CALL VERB-DIR-ONLY?,WRD
|
|
ZERO? STACK /?CCL45
|
|
?CTR44: SUB PTR,4 >PTR
|
|
ADD PTR,2
|
|
CALL CHANGE-LEXV,STACK,W?THEN
|
|
ADD P-LEN,2 >P-LEN
|
|
JUMP ?CND12
|
|
?CCL45: CALL WT?,WRD,128
|
|
ZERO? STACK /?CCL51
|
|
GRTR? P-LEN,0 \?CCL54
|
|
EQUAL? NW,W?OF \?CCL54
|
|
EQUAL? WRD,W?ALL,W?ONE /?CCL54
|
|
SUB P-NCN,1
|
|
PUT P-OFW,STACK,WRD
|
|
JUMP ?CND12
|
|
?CCL54: CALL WT?,WRD,32
|
|
ZERO? STACK /?CCL58
|
|
ZERO? NW /?CCL58
|
|
CALL WT?,NW,16
|
|
ZERO? STACK \?CCL58
|
|
CALL WT?,NW,128
|
|
ZERO? STACK \?CND12
|
|
CALL WT?,NW,32
|
|
ZERO? STACK \?CND12
|
|
?CCL58: ZERO? ANDFLG \?CCL66
|
|
EQUAL? NW,W?BUT,W?EXCEPT /?CCL66
|
|
EQUAL? NW,W?AND,W?COMMA /?CCL66
|
|
ADD NUM,1 >?TMP1
|
|
ADD PTR,2
|
|
MUL STACK,2
|
|
ADD P-LEXV,STACK
|
|
PUT P-ITBL,?TMP1,STACK
|
|
RETURN PTR
|
|
?CCL66: SET 'ANDFLG,FALSE-VALUE
|
|
JUMP ?CND12
|
|
?CCL51: CALL WT?,WRD,32
|
|
ZERO? STACK \?CND12
|
|
CALL WT?,WRD,4
|
|
ZERO? STACK /?CCL72
|
|
CALL BUZZER-WORD?,WRD,PTR
|
|
ZERO? STACK /?CND12
|
|
RFALSE
|
|
?CCL72: ZERO? ANDFLG /?CCL76
|
|
GET P-ITBL,P-VERB
|
|
ZERO? STACK \?CCL76
|
|
SUB PTR,4 >PTR
|
|
ADD PTR,2
|
|
CALL CHANGE-LEXV,STACK,W?THEN
|
|
ADD P-LEN,2 >P-LEN
|
|
?CND12: SET 'LW,WRD
|
|
SET 'FIRST??,FALSE-VALUE
|
|
ADD PTR,P-LEXELEN >PTR
|
|
JUMP ?PRG8
|
|
?CCL76: CALL WT?,WRD,8
|
|
ZERO? STACK \?CND12
|
|
CALL CANT-USE,PTR
|
|
RFALSE
|
|
?CCL14: CALL UNKNOWN-WORD,PTR
|
|
RFALSE
|
|
|
|
|
|
.FUNCT VERB-DIR-ONLY?,WRD,?TMP1
|
|
CALL WT?,WRD,128
|
|
ZERO? STACK \FALSE
|
|
CALL WT?,WRD,32
|
|
ZERO? STACK \FALSE
|
|
CALL WT?,WRD,16 >?TMP1
|
|
ZERO? ?TMP1 /?PRD7
|
|
RETURN ?TMP1
|
|
?PRD7: CALL WT?,WRD,64
|
|
RSTACK
|
|
|
|
|
|
.FUNCT NUMBER?,PTR,CNT,BPTR,CHR,SUM=0,TIM=0,TMP,?TMP1
|
|
MUL PTR,2
|
|
ADD P-LEXV,STACK >TMP
|
|
GETB TMP,2 >CNT
|
|
GETB TMP,3 >BPTR
|
|
?PRG1: DLESS? 'CNT,0 /?REP2
|
|
GETB P-INBUF,BPTR >CHR
|
|
EQUAL? CHR,58 \?CCL8
|
|
SET 'TIM,SUM
|
|
SET 'SUM,0
|
|
JUMP ?CND6
|
|
?CCL8: GRTR? SUM,29999 /FALSE
|
|
GRTR? CHR,57 /FALSE
|
|
LESS? CHR,48 /FALSE
|
|
MUL SUM,10 >?TMP1
|
|
SUB CHR,48
|
|
ADD ?TMP1,STACK >SUM
|
|
?CND6: INC 'BPTR
|
|
JUMP ?PRG1
|
|
?REP2: CALL CHANGE-LEXV,PTR,W?INT.NUM
|
|
GRTR? SUM,9999 /FALSE
|
|
ZERO? TIM /?CND15
|
|
GRTR? TIM,23 /FALSE
|
|
MUL TIM,60
|
|
ADD SUM,STACK >SUM
|
|
?CND15: SET 'P-TIME,TIM
|
|
SET 'P-NUMBER,SUM
|
|
RETURN W?INT.NUM
|
|
|
|
|
|
.FUNCT ORPHAN-MERGE,CNT=-1,TEMP,VERB,BEG,END,ADJ=0,ADJB=0,VRB=0,NOUN=0,ADJE,WRD,?TMP1
|
|
SET 'P-OFLAG,FALSE-VALUE
|
|
GET P-ITBL,P-VERBN >WRD
|
|
ZERO? WRD /?CND1
|
|
GET WRD,0 >WRD
|
|
ZERO? WRD /?CND1
|
|
CALL WT?,WRD,64,1 >?TMP1
|
|
GET P-OTBL,P-VERB
|
|
EQUAL? ?TMP1,STACK \?CND5
|
|
SET 'VRB,TRUE-VALUE
|
|
?CND5: CALL WT?,WRD,32
|
|
ZERO? STACK /?CND7
|
|
SET 'ADJ,TRUE-VALUE
|
|
?CND7: CALL WT?,WRD,128
|
|
ZERO? STACK /?CND1
|
|
SET 'NOUN,TRUE-VALUE
|
|
?CND1: ZERO? VRB \?CND11
|
|
ZERO? ADJ \?CND11
|
|
CALL WT?,WRD,128,0
|
|
ZERO? STACK /?CND11
|
|
ZERO? P-NCN \?CND11
|
|
PUT P-ITBL,P-VERB,0
|
|
PUT P-ITBL,P-VERBN,0
|
|
ADD P-LEXV,2
|
|
PUT P-ITBL,P-NC1,STACK
|
|
ADD P-LEXV,6
|
|
PUT P-ITBL,P-NC1L,STACK
|
|
SET 'P-NCN,1
|
|
?CND11: GET P-ITBL,P-VERB >VERB
|
|
ZERO? VERB /?CCL19
|
|
ZERO? ADJ \?CCL19
|
|
ZERO? VRB \?CCL19
|
|
GET P-OTBL,P-VERB
|
|
EQUAL? VERB,STACK \FALSE
|
|
?CCL19: EQUAL? P-NCN,2 /FALSE
|
|
GET P-OTBL,P-NC1
|
|
EQUAL? STACK,1 \?CCL27
|
|
GET P-ITBL,P-PREP1 >?TMP1
|
|
GET P-OTBL,P-PREP1
|
|
EQUAL? ?TMP1,0,STACK \FALSE
|
|
ZERO? ADJ /?CND31
|
|
ADD P-LEXV,2
|
|
PUT P-ITBL,P-NC1,STACK
|
|
GET P-ITBL,P-NC1L
|
|
ZERO? STACK \?CND33
|
|
ADD P-LEXV,6
|
|
PUT P-ITBL,P-NC1L,STACK
|
|
?CND33: ZERO? P-NCN \?CND31
|
|
SET 'P-NCN,1
|
|
?CND31: GET P-ITBL,P-NC1
|
|
PUT P-OTBL,P-NC1,STACK
|
|
GET P-ITBL,P-NC1L
|
|
PUT P-OTBL,P-NC1L,STACK
|
|
JUMP ?CND17
|
|
?CCL27: GET P-OTBL,P-NC2
|
|
EQUAL? STACK,1 \?CCL38
|
|
GET P-ITBL,P-PREP1 >?TMP1
|
|
GET P-OTBL,P-PREP2
|
|
EQUAL? ?TMP1,FALSE-VALUE,STACK \FALSE
|
|
ZERO? ADJ \?CCL43
|
|
ZERO? P-NCN \?CND42
|
|
ZERO? NOUN /?CND42
|
|
?CCL43: ADD P-LEXV,2
|
|
PUT P-ITBL,P-NC1,STACK
|
|
GET P-ITBL,P-NC1L
|
|
ZERO? STACK \?CND42
|
|
ADD P-LEXV,6
|
|
PUT P-ITBL,P-NC1L,STACK
|
|
?CND42: GET P-ITBL,P-NC1
|
|
PUT P-OTBL,P-NC2,STACK
|
|
GET P-ITBL,P-NC1L
|
|
PUT P-OTBL,P-NC2L,STACK
|
|
SET 'P-NCN,2
|
|
JUMP ?CND17
|
|
?CCL38: ZERO? P-ACLAUSE /?CND17
|
|
EQUAL? P-NCN,1 /?CCL53
|
|
ZERO? ADJ \?CCL53
|
|
SET 'P-ACLAUSE,FALSE-VALUE
|
|
RFALSE
|
|
?CCL53: GET P-ITBL,P-NC1 >BEG
|
|
ZERO? ADJ /?CND56
|
|
ADD P-LEXV,2 >BEG
|
|
PUT P-ITBL,P-NC1,BEG
|
|
SET 'ADJ,FALSE-VALUE
|
|
?CND56: GET P-ITBL,P-NC1L >END
|
|
?PRG58: EQUAL? BEG,END \?CND60
|
|
ZERO? ADJB /?CCL64
|
|
CALL CLAUSE-WIN,ADJB,ADJE
|
|
?CND17: GET P-OVTBL,0
|
|
PUT P-VTBL,0,STACK
|
|
GETB P-OVTBL,2
|
|
PUTB P-VTBL,2,STACK
|
|
GETB P-OVTBL,3
|
|
PUTB P-VTBL,3,STACK
|
|
PUT P-OTBL,P-VERBN,P-VTBL
|
|
PUTB P-VTBL,2,0
|
|
?PRG83: IGRTR? 'CNT,P-ITBLLEN \?CCL87
|
|
SET 'P-MERGED,TRUE-VALUE
|
|
RTRUE
|
|
?CCL64: SET 'P-ACLAUSE,FALSE-VALUE
|
|
RFALSE
|
|
?CND60: GET BEG,0 >WRD
|
|
EQUAL? WRD,W?ALL,W?ONE /?CTR66
|
|
GETB WRD,P-PSOFF
|
|
BTST STACK,32 \?CCL67
|
|
CALL ADJ-CHECK,WRD,ADJ,ADJ
|
|
ZERO? STACK /?CCL67
|
|
?CTR66: ZERO? ADJB \?CND72
|
|
SET 'ADJB,BEG
|
|
?CND72: SET 'ADJ,WRD
|
|
ADD BEG,P-WORDLEN >ADJE
|
|
JUMP ?CND65
|
|
?CCL67: GETB WRD,P-PSOFF
|
|
BTST STACK,128 \?CND65
|
|
ADD BEG,P-WORDLEN
|
|
EQUAL? STACK,END \?CND65
|
|
ZERO? P-ANAM /?CND65
|
|
EQUAL? WRD,P-ANAM /?CND65
|
|
SET 'P-ANAM,FALSE-VALUE
|
|
GET P-ITBL,P-NC1 >ADJB
|
|
SET 'ADJE,END
|
|
?CND65: ADD BEG,P-WORDLEN >BEG
|
|
ZERO? END \?PRG58
|
|
SET 'END,BEG
|
|
SET 'P-NCN,1
|
|
SUB BEG,P-WORDLEN
|
|
PUT P-ITBL,P-NC1,STACK
|
|
PUT P-ITBL,P-NC1L,BEG
|
|
JUMP ?PRG58
|
|
?CCL87: GET P-OTBL,CNT
|
|
PUT P-ITBL,CNT,STACK
|
|
JUMP ?PRG83
|
|
|
|
|
|
.FUNCT CLAUSE-WIN,ADJB=0,ADJE=0
|
|
ZERO? ADJB /?CND1
|
|
GET P-OTBL,P-VERB
|
|
PUT P-ITBL,P-VERB,STACK
|
|
?CND1: PUT P-CCTBL,CC-BEG,P-ACLAUSE
|
|
ADD P-ACLAUSE,1
|
|
PUT P-CCTBL,CC-END,STACK
|
|
PUT P-CCTBL,CC-IBEG,ADJB
|
|
PUT P-CCTBL,CC-IEND,ADJE
|
|
EQUAL? P-ACLAUSE,P-NC1 \?CCL5
|
|
PUT P-CCTBL,CC-CLAUSE,P-OCL1
|
|
JUMP ?CND3
|
|
?CCL5: PUT P-CCTBL,CC-CLAUSE,P-OCL2
|
|
?CND3: CALL CLAUSE-COPY,P-OTBL,P-OTBL
|
|
GET P-OTBL,P-NC2
|
|
ZERO? STACK /?PEN6
|
|
SET 'P-NCN,2
|
|
?PEN6: SET 'P-ACLAUSE,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT WORD-PRINT,CNT,BUF,TBL=0
|
|
ZERO? TBL \?PRG3
|
|
SET 'TBL,P-INBUF
|
|
?PRG3: DLESS? 'CNT,0 /TRUE
|
|
GETB TBL,BUF
|
|
PRINTC STACK
|
|
INC 'BUF
|
|
JUMP ?PRG3
|
|
|
|
|
|
.FUNCT UNKNOWN-WORD,PTR,BUF,?TMP1
|
|
PUT OOPS-TABLE,O-PTR,PTR
|
|
ZERO? P-OFLAG /?PRG4
|
|
PUT OOPS-TABLE,O-END,0
|
|
?PRG4: PRINTC 91
|
|
PRINTI "I don't know the word "
|
|
PRINTC 34
|
|
MUL 2,PTR >BUF
|
|
ADD P-LEXV,BUF
|
|
GETB STACK,2 >?TMP1
|
|
ADD P-LEXV,BUF
|
|
GETB STACK,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
SET 'P-OFLAG,FALSE-VALUE
|
|
PRINTR ".""]"
|
|
|
|
|
|
.FUNCT CANT-USE,PTR,BUF,?TMP1
|
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
|
SET 'P-OFLAG,FALSE-VALUE
|
|
PRINTI "[Sorry, but I don't understand the word """
|
|
MUL PTR,2 >BUF
|
|
ADD P-LEXV,BUF
|
|
GETB STACK,2 >?TMP1
|
|
ADD P-LEXV,BUF
|
|
GETB STACK,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
PRINTR """ when you use it that way.]"
|
|
|
|
|
|
.FUNCT SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1=0,DRIVE2=0,PREP,VERB,?TMP2,?TMP1
|
|
GET P-ITBL,P-VERB >VERB
|
|
ZERO? VERB \?CND1
|
|
CALL MISSING,STR?30
|
|
RFALSE
|
|
?CND1: SUB 255,VERB
|
|
GET VERBS,STACK >SYN
|
|
GETB SYN,0 >LEN
|
|
INC 'SYN
|
|
?PRG3: GETB SYN,P-SBITS
|
|
BAND STACK,P-SONUMS >NUM
|
|
GRTR? P-NCN,NUM /?CND5
|
|
LESS? NUM,1 /?CCL9
|
|
ZERO? P-NCN \?CCL9
|
|
GET P-ITBL,P-PREP1 >PREP
|
|
ZERO? PREP /?CTR8
|
|
GETB SYN,P-SPREP1
|
|
EQUAL? PREP,STACK \?CCL9
|
|
?CTR8: SET 'DRIVE1,SYN
|
|
JUMP ?CND5
|
|
?CCL9: GETB SYN,P-SPREP1 >?TMP1
|
|
GET P-ITBL,P-PREP1
|
|
EQUAL? ?TMP1,STACK \?CND5
|
|
EQUAL? NUM,2 \?CCL18
|
|
EQUAL? P-NCN,1 \?CCL18
|
|
SET 'DRIVE2,SYN
|
|
?CND5: DLESS? 'LEN,1 \?CCL24
|
|
ZERO? DRIVE1 \?REP4
|
|
ZERO? DRIVE2 \?REP4
|
|
CALL DONT-UNDERSTAND
|
|
RFALSE
|
|
?CCL18: GETB SYN,P-SPREP2 >?TMP1
|
|
GET P-ITBL,P-PREP2
|
|
EQUAL? ?TMP1,STACK \?CND5
|
|
CALL SYNTAX-FOUND,SYN
|
|
RTRUE
|
|
?CCL24: ADD SYN,P-SYNLEN >SYN
|
|
JUMP ?PRG3
|
|
?REP4: ZERO? DRIVE1 /?CCL32
|
|
GETB DRIVE1,P-SFWIM1 >?TMP2
|
|
GETB DRIVE1,P-SLOC1 >?TMP1
|
|
GETB DRIVE1,P-SPREP1
|
|
CALL GWIM,?TMP2,?TMP1,STACK >OBJ
|
|
ZERO? OBJ /?CCL32
|
|
PUTB P-PRSO,P-MATCHLEN,1
|
|
PUTB P-PRSO,1,OBJ
|
|
CALL SYNTAX-FOUND,DRIVE1
|
|
RSTACK
|
|
?CCL32: ZERO? DRIVE2 /?CCL36
|
|
GETB DRIVE2,P-SFWIM2 >?TMP2
|
|
GETB DRIVE2,P-SLOC2 >?TMP1
|
|
GETB DRIVE2,P-SPREP2
|
|
CALL GWIM,?TMP2,?TMP1,STACK >OBJ
|
|
ZERO? OBJ /?CCL36
|
|
PUTB P-PRSI,P-MATCHLEN,1
|
|
PUTB P-PRSI,1,OBJ
|
|
CALL SYNTAX-FOUND,DRIVE2
|
|
RSTACK
|
|
?CCL36: SET 'OBJ,FALSE-VALUE
|
|
EQUAL? WINNER,PLAYER \?PRG46
|
|
EQUAL? P-PRSA-WORD,W?DRIVE,W?PROCEED,W?STEER /?PRG46
|
|
CALL ORPHAN,DRIVE1,DRIVE2
|
|
SET 'OBJ,TRUE-VALUE
|
|
PRINTI "[Wh"
|
|
JUMP ?CND39
|
|
?PRG46: PRINTI "[Your command was not complete. Next time, type wh"
|
|
?CND39: EQUAL? VERB,ACT?HEAD \?CCL50
|
|
PRINTI "ere"
|
|
JUMP ?CND48
|
|
?CCL50: ZERO? DRIVE1 /?PRD56
|
|
GETB DRIVE1,P-SFWIM1
|
|
EQUAL? STACK,PERSONBIT /?PRG61
|
|
?PRD56: ZERO? DRIVE2 /?PRG63
|
|
GETB DRIVE2,P-SFWIM2
|
|
EQUAL? STACK,PERSONBIT \?PRG63
|
|
?PRG61: PRINTI "om"
|
|
JUMP ?CND48
|
|
?PRG63: PRINTI "at"
|
|
?CND48: ZERO? OBJ /?PRG70
|
|
PRINTI " do you want to "
|
|
JUMP ?CND65
|
|
?PRG70: PRINTI " you want"
|
|
CALL HIM-HER-IT,WINNER
|
|
PRINTI " to "
|
|
?CND65: CALL VERB-PRINT
|
|
ZERO? DRIVE2 /?CND72
|
|
SET 'PREP,P-MERGED
|
|
SET 'P-MERGED,FALSE-VALUE
|
|
SET 'P-OFLAG,FALSE-VALUE
|
|
CALL CLAUSE-PRINT,P-NC1,P-NC1L
|
|
SET 'P-MERGED,PREP
|
|
?CND72: SET 'P-END-ON-PREP,FALSE-VALUE
|
|
ZERO? DRIVE1 /?CCL76
|
|
GETB DRIVE1,P-SPREP1
|
|
JUMP ?CND74
|
|
?CCL76: GETB DRIVE2,P-SPREP2
|
|
?CND74: CALL PREP-PRINT,STACK
|
|
ZERO? OBJ /?PRG82
|
|
SET 'P-OFLAG,TRUE-VALUE
|
|
PRINTI "?]"
|
|
CRLF
|
|
RFALSE
|
|
?PRG82: PRINTI ".]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT DONT-UNDERSTAND
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTR "[Sorry, but I don't understand. Please say that another way, or try something else.]"
|
|
|
|
|
|
.FUNCT VERB-PRINT,GERUND=0,TMP,?TMP1
|
|
GET P-ITBL,P-VERBN >TMP
|
|
ZERO? TMP \?CCL3
|
|
ZERO? GERUND \?PRG9
|
|
PRINTI "tell"
|
|
RTRUE
|
|
?PRG9: PRINTI "walk"
|
|
JUMP ?CND1
|
|
?CCL3: ZERO? GERUND \?CTR11
|
|
GETB P-VTBL,2
|
|
ZERO? STACK \?CCL12
|
|
?CTR11: GET TMP,0 >TMP
|
|
EQUAL? TMP,W?L \?CCL17
|
|
PRINTB W?LOOK
|
|
JUMP ?CND1
|
|
?CCL17: EQUAL? TMP,W?X \?CCL19
|
|
PRINTB W?EXAMINE
|
|
JUMP ?CND1
|
|
?CCL19: EQUAL? TMP,W?Z \?CCL21
|
|
PRINTB W?WAIT
|
|
JUMP ?CND1
|
|
?CCL21: ZERO? GERUND /?CCL23
|
|
EQUAL? TMP,W?BATHE \?CCL26
|
|
PRINTB W?BATH
|
|
JUMP ?CND1
|
|
?CCL26: EQUAL? TMP,W?DIG \?CCL28
|
|
PRINTI "digg"
|
|
JUMP ?CND1
|
|
?CCL28: EQUAL? TMP,W?GET \?CCL30
|
|
PRINTI "gett"
|
|
JUMP ?CND1
|
|
?CCL30: PRINTB TMP
|
|
JUMP ?CND1
|
|
?CCL23: PRINTB TMP
|
|
JUMP ?CND1
|
|
?CCL12: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
PUTB P-VTBL,2,0
|
|
?CND1: ZERO? GERUND /FALSE
|
|
PRINTI "ing?"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ORPHAN,D1,D2,CNT=-1
|
|
ZERO? P-MERGED \?CND1
|
|
PUT P-OCL1,P-MATCHLEN,0
|
|
PUT P-OCL2,P-MATCHLEN,0
|
|
?CND1: GET P-VTBL,0
|
|
PUT P-OVTBL,0,STACK
|
|
GETB P-VTBL,2
|
|
PUTB P-OVTBL,2,STACK
|
|
GETB P-VTBL,3
|
|
PUTB P-OVTBL,3,STACK
|
|
?PRG3: IGRTR? 'CNT,P-ITBLLEN /?REP4
|
|
GET P-ITBL,CNT
|
|
PUT P-OTBL,CNT,STACK
|
|
JUMP ?PRG3
|
|
?REP4: EQUAL? P-NCN,2 \?CND8
|
|
PUT P-CCTBL,CC-BEG,P-NC2
|
|
PUT P-CCTBL,CC-END,P-NC2L
|
|
PUT P-CCTBL,CC-CLAUSE,P-OCL2
|
|
PUT P-CCTBL,CC-IBEG,FALSE-VALUE
|
|
PUT P-CCTBL,CC-IEND,FALSE-VALUE
|
|
CALL CLAUSE-COPY,P-ITBL,P-OTBL
|
|
?CND8: LESS? P-NCN,1 /?CND10
|
|
PUT P-CCTBL,CC-BEG,P-NC1
|
|
PUT P-CCTBL,CC-END,P-NC1L
|
|
PUT P-CCTBL,CC-CLAUSE,P-OCL1
|
|
PUT P-CCTBL,CC-IBEG,FALSE-VALUE
|
|
PUT P-CCTBL,CC-IEND,FALSE-VALUE
|
|
CALL CLAUSE-COPY,P-ITBL,P-OTBL
|
|
?CND10: ZERO? D1 /?CCL14
|
|
GETB D1,P-SPREP1
|
|
PUT P-OTBL,P-PREP1,STACK
|
|
PUT P-OTBL,P-NC1,1
|
|
RTRUE
|
|
?CCL14: ZERO? D2 /FALSE
|
|
GETB D2,P-SPREP2
|
|
PUT P-OTBL,P-PREP2,STACK
|
|
PUT P-OTBL,P-NC2,1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CLAUSE-PRINT,BPTR,EPTR,THE?=1,?TMP1
|
|
GET P-ITBL,BPTR >?TMP1
|
|
GET P-ITBL,EPTR
|
|
CALL BUFFER-PRINT,?TMP1,STACK,THE?
|
|
RSTACK
|
|
|
|
|
|
.FUNCT BUFFER-PRINT,BEG,END,CP,NOSP=0,WRD,NW,FIRST??=1,PN=0,?TMP1
|
|
?PRG1: EQUAL? BEG,END /TRUE
|
|
ZERO? NOSP \?CTR6
|
|
EQUAL? WRD,W?APOSTROPHE /?CTR6
|
|
EQUAL? NW,W?PERIOD,W?COMMA,W?APOSTROPHE \?PRG11
|
|
?CTR6: SET 'NOSP,FALSE-VALUE
|
|
JUMP ?CND5
|
|
?PRG11: PRINTC 32
|
|
?CND5: GET BEG,0 >WRD
|
|
ADD BEG,P-WORDLEN
|
|
EQUAL? END,STACK \?CCL15
|
|
SET 'NW,0
|
|
JUMP ?CND13
|
|
?CCL15: GET BEG,P-LEXELEN >NW
|
|
?CND13: EQUAL? WRD,W?MY /?CCL18
|
|
CALL ZMEMQ,WRD,CHAR-POSS-TABLE
|
|
ZERO? STACK /?CCL18
|
|
SET 'NOSP,TRUE-VALUE
|
|
JUMP ?CND16
|
|
?CCL18: EQUAL? NW,W?MY /?CCL22
|
|
CALL ZMEMQ,NW,CHAR-POSS-TABLE
|
|
ZERO? STACK /?CCL22
|
|
SET 'NOSP,TRUE-VALUE
|
|
JUMP ?CND16
|
|
?CCL22: ZERO? OOPS-PRINT /?CND16
|
|
EQUAL? WRD,W?HIM \?PRD29
|
|
CALL VISIBLE?,P-HIM-OBJECT
|
|
ZERO? STACK /?CCL25
|
|
?PRD29: EQUAL? WRD,W?HER \?CND16
|
|
CALL VISIBLE?,P-HER-OBJECT
|
|
ZERO? STACK \?CND16
|
|
?CCL25: SET 'PN,TRUE-VALUE
|
|
?CND16: EQUAL? WRD,W?MY \?CCL36
|
|
ZERO? OOPS-PRINT \?CCL39
|
|
PRINTB W?YOUR
|
|
JUMP ?CND34
|
|
?CCL39: PRINTB W?MY
|
|
JUMP ?CND34
|
|
?CCL36: CALL ZMEMQ,WRD,CHAR-POSS-TABLE
|
|
ZERO? STACK /?CCL41
|
|
PRINTC 39
|
|
JUMP ?CND34
|
|
?CCL41: ZERO? OOPS-PRINT \?CCL45
|
|
EQUAL? WRD,W?ALL,W?PERIOD,W?APOSTROPHE /?CCL45
|
|
CALL WT?,WRD,4
|
|
ZERO? STACK \?PRD49
|
|
CALL WT?,WRD,8
|
|
ZERO? STACK /?CCL45
|
|
?PRD49: CALL WT?,WRD,32
|
|
ZERO? STACK \?CCL45
|
|
CALL WT?,WRD,128
|
|
ZERO? STACK \?CCL45
|
|
SET 'NOSP,TRUE-VALUE
|
|
JUMP ?CND34
|
|
?CCL45: EQUAL? WRD,W?ME \?CCL54
|
|
ZERO? OOPS-PRINT \?CCL54
|
|
PRINTD PLAYER
|
|
SET 'PN,TRUE-VALUE
|
|
JUMP ?CND34
|
|
?CCL54: CALL CAPITAL-NOUN?,WRD
|
|
ZERO? STACK /?CCL58
|
|
CALL CAPITALIZE,BEG
|
|
SET 'PN,TRUE-VALUE
|
|
JUMP ?CND34
|
|
?CCL58: ZERO? FIRST?? /?CND59
|
|
ZERO? PN \?CND59
|
|
ZERO? CP /?CND59
|
|
EQUAL? WRD,W?HER,W?HIM,W?YOUR /?CND59
|
|
PRINTI "the "
|
|
?CND59: ZERO? P-OFLAG \?CTR69
|
|
ZERO? P-MERGED /?CCL70
|
|
?CTR69: PRINTB WRD
|
|
JUMP ?CND68
|
|
?CCL70: EQUAL? WRD,W?IT \?CCL74
|
|
CALL VISIBLE?,P-IT-OBJECT
|
|
ZERO? STACK /?CCL74
|
|
PRINTD P-IT-OBJECT
|
|
JUMP ?CND68
|
|
?CCL74: EQUAL? WRD,W?HER \?CCL78
|
|
ZERO? PN \?CCL78
|
|
PRINTD P-HER-OBJECT
|
|
JUMP ?CND68
|
|
?CCL78: EQUAL? WRD,W?HIM \?CCL82
|
|
ZERO? PN \?CCL82
|
|
PRINTD P-HIM-OBJECT
|
|
JUMP ?CND68
|
|
?CCL82: GETB BEG,2 >?TMP1
|
|
GETB BEG,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
?CND68: SET 'FIRST??,FALSE-VALUE
|
|
?CND34: ADD BEG,P-WORDLEN >BEG
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT TITLE-NOUN?,WRD
|
|
EQUAL? WRD,W?MR,W?MRS,W?MS /TRUE
|
|
EQUAL? WRD,W?MISTER,W?MISS,W?SIR /TRUE
|
|
EQUAL? WRD,W?LADY,W?DAME,W?LORD /TRUE
|
|
EQUAL? WRD,W?DR,W?DOCTOR,W?DETECT /TRUE
|
|
EQUAL? WRD,W?MADAME,W?MADAM,W?MASTER /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT CAPITAL-NOUN?,WRD,?TMP1
|
|
CALL TITLE-NOUN?,WRD >?TMP1
|
|
ZERO? ?TMP1 /?PRD3
|
|
RETURN ?TMP1
|
|
?PRD3: EQUAL? WRD,W?BOLITHO,W?DEE /TRUE
|
|
EQUAL? WRD,W?DEIRDRE,W?FORDYCE,W?HALLAM /TRUE
|
|
EQUAL? WRD,W?HYDE,W?IAN,W?INDIAN /TRUE
|
|
EQUAL? WRD,W?IRIS,W?JACK,W?LIONEL /TRUE
|
|
EQUAL? WRD,W?LYND,W?MONTAGUE,W?MOONMIST /TRUE
|
|
EQUAL? WRD,W?NICHOLAS,W?PENTREATH,W?TAMARA /TRUE
|
|
EQUAL? WRD,W?TAMMY,W?TRESYLLIAN,W?VIV /TRUE
|
|
EQUAL? WRD,W?VIVIEN,W?WENDISH /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT CAPITALIZE,PTR,?TMP1
|
|
ZERO? P-OFLAG \?CTR2
|
|
ZERO? P-MERGED /?CCL3
|
|
?CTR2: GET PTR,0
|
|
PRINTB STACK
|
|
RTRUE
|
|
?CCL3: GETB PTR,3
|
|
GETB P-INBUF,STACK
|
|
SUB STACK,32
|
|
PRINTC STACK
|
|
GETB PTR,2
|
|
SUB STACK,1 >?TMP1
|
|
GETB PTR,3
|
|
ADD STACK,1
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT PREP-PRINT,PREP,SP?=1,WRD,VRB
|
|
ZERO? PREP /FALSE
|
|
GET P-ITBL,P-VERBN
|
|
GET STACK,0 >VRB
|
|
ZERO? P-END-ON-PREP /?CCL5
|
|
EQUAL? VRB,W?LIE,W?SIT \FALSE
|
|
EQUAL? PREP,PR?DOWN \FALSE
|
|
?CCL5: ZERO? SP? /?CND10
|
|
PRINTC 32
|
|
?CND10: CALL PREP-FIND,PREP >WRD
|
|
EQUAL? WRD,W?AGAINST \?CCL16
|
|
PRINTI "against"
|
|
JUMP ?CND14
|
|
?CCL16: EQUAL? WRD,W?THROUGH \?CCL20
|
|
PRINTI "through"
|
|
JUMP ?CND14
|
|
?CCL20: PRINTB WRD
|
|
?CND14: EQUAL? VRB,W?SIT,W?LIE \?CND23
|
|
EQUAL? WRD,W?DOWN \?CND23
|
|
PRINTI " on"
|
|
?CND23: EQUAL? VRB,W?GET \TRUE
|
|
EQUAL? WRD,W?OUT \TRUE
|
|
PRINTI " of"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CLAUSE-COPY,SRC,DEST,IBEG=0,IEND,OCL,BEG,END,BB,EE,OBEG,CNT,B,E
|
|
GET P-CCTBL,CC-BEG >BB
|
|
GET P-CCTBL,CC-END >EE
|
|
GET P-CCTBL,CC-CLAUSE >OCL
|
|
GET P-CCTBL,CC-IBEG >IBEG
|
|
GET P-CCTBL,CC-IEND >IEND
|
|
GET SRC,BB >BEG
|
|
GET SRC,EE >END
|
|
GET OCL,P-MATCHLEN >OBEG
|
|
?PRG1: EQUAL? BEG,END \?CND3
|
|
ZERO? IBEG /?REP2
|
|
ZERO? P-ANAM \?REP2
|
|
CALL CLAUSE-SUBSTRUC,IBEG,IEND
|
|
?REP2: GRTR? OBEG,0 \?CND13
|
|
GET OCL,P-MATCHLEN
|
|
SUB STACK,OBEG >CNT
|
|
GRTR? CNT,0 \?CND13
|
|
PUT OCL,P-MATCHLEN,0
|
|
INC 'OBEG
|
|
?PRG17: GET OCL,OBEG
|
|
CALL CLAUSE-ADD,STACK,TRUE-VALUE
|
|
SUB CNT,2 >CNT
|
|
ZERO? CNT /?REP18
|
|
ADD OBEG,2 >OBEG
|
|
JUMP ?PRG17
|
|
?CND3: ZERO? IBEG /?CND9
|
|
GET BEG,0
|
|
EQUAL? P-ANAM,STACK \?CND9
|
|
CALL CLAUSE-SUBSTRUC,IBEG,IEND
|
|
?CND9: GET BEG,0
|
|
CALL CLAUSE-ADD,STACK
|
|
ADD BEG,P-WORDLEN >BEG
|
|
JUMP ?PRG1
|
|
?REP18: SET 'OBEG,0
|
|
?CND13: MUL OBEG,P-LEXELEN
|
|
ADD STACK,2
|
|
ADD OCL,STACK
|
|
PUT DEST,BB,STACK
|
|
GET OCL,P-MATCHLEN
|
|
MUL STACK,P-LEXELEN
|
|
ADD STACK,2
|
|
ADD OCL,STACK
|
|
PUT DEST,EE,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT CLAUSE-SUBSTRUC,B,E
|
|
?PRG1: EQUAL? B,E /TRUE
|
|
GET B,0
|
|
CALL CLAUSE-ADD,STACK
|
|
ADD B,P-WORDLEN >B
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT CLAUSE-ADD,WRD,CHECK?=0,OCL,PTR
|
|
GET P-CCTBL,CC-CLAUSE >OCL
|
|
GET OCL,P-MATCHLEN >PTR
|
|
ZERO? CHECK? /?CCL3
|
|
ZERO? PTR /?CCL3
|
|
CALL ZMEMQ,WRD,OCL
|
|
ZERO? STACK \FALSE
|
|
?CCL3: ADD PTR,2 >PTR
|
|
SUB PTR,1
|
|
PUT OCL,STACK,WRD
|
|
PUT OCL,PTR,0
|
|
PUT OCL,P-MATCHLEN,PTR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PREP-FIND,PREP,CNT=0,SIZE
|
|
GET PREPOSITIONS,0
|
|
MUL STACK,2 >SIZE
|
|
?PRG1: IGRTR? 'CNT,SIZE /FALSE
|
|
GET PREPOSITIONS,CNT
|
|
EQUAL? STACK,PREP \?PRG1
|
|
SUB CNT,1
|
|
GET PREPOSITIONS,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SYNTAX-FOUND,SYN
|
|
SET 'P-SYNTAX,SYN
|
|
GETB SYN,P-SACTION >PRSA
|
|
RETURN PRSA
|
|
|
|
|
|
.FUNCT GWIM,GBIT,LBIT,PREP,OBJ
|
|
EQUAL? GBIT,RMUNGBIT \?CND1
|
|
RETURN ROOMS
|
|
?CND1: SET 'P-GWIMBIT,GBIT
|
|
SET 'P-SLOCBITS,LBIT
|
|
PUTB P-MERGE,P-MATCHLEN,0
|
|
CALL GET-OBJECT,P-MERGE,FALSE-VALUE
|
|
ZERO? STACK /?CCL5
|
|
SET 'P-GWIMBIT,0
|
|
GETB P-MERGE,P-MATCHLEN
|
|
EQUAL? STACK,1 \FALSE
|
|
GETB P-MERGE,1 >OBJ
|
|
PRINTC 40
|
|
CALL PREP-PRINT,PREP,FALSE-VALUE
|
|
ZERO? STACK /?PRG15
|
|
CALL THE?,OBJ
|
|
PRINTC 32
|
|
?PRG15: PRINTD OBJ
|
|
PRINTC 41
|
|
CRLF
|
|
RETURN OBJ
|
|
?CCL5: SET 'P-GWIMBIT,0
|
|
RFALSE
|
|
|
|
|
|
.FUNCT SNARF-OBJECTS,PTR
|
|
GET P-ITBL,P-NC1 >PTR
|
|
ZERO? PTR /?CND1
|
|
SET 'P-PHR,0
|
|
GETB P-SYNTAX,P-SLOC1 >P-SLOCBITS
|
|
GET P-ITBL,P-NC1L
|
|
CALL SNARFEM,PTR,STACK,P-PRSO
|
|
ZERO? STACK /FALSE
|
|
GETB P-BUTS,P-MATCHLEN
|
|
ZERO? STACK /?CND1
|
|
CALL BUT-MERGE,P-PRSO >P-PRSO
|
|
?CND1: GET P-ITBL,P-NC2 >PTR
|
|
ZERO? PTR /TRUE
|
|
SET 'P-PHR,1
|
|
GETB P-SYNTAX,P-SLOC2 >P-SLOCBITS
|
|
GET P-ITBL,P-NC2L
|
|
CALL SNARFEM,PTR,STACK,P-PRSI
|
|
ZERO? STACK /FALSE
|
|
GETB P-BUTS,P-MATCHLEN
|
|
ZERO? STACK /TRUE
|
|
GETB P-PRSI,P-MATCHLEN
|
|
EQUAL? STACK,1 \?CCL15
|
|
CALL BUT-MERGE,P-PRSO >P-PRSO
|
|
RTRUE
|
|
?CCL15: CALL BUT-MERGE,P-PRSI >P-PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT BUT-MERGE,TBL,LEN,BUTLEN,CNT=1,MATCHES=0,OBJ,NTBL
|
|
GETB TBL,P-MATCHLEN >LEN
|
|
PUTB P-MERGE,P-MATCHLEN,0
|
|
?PRG1: DLESS? 'LEN,0 /?REP2
|
|
GETB TBL,CNT >OBJ
|
|
CALL ZMEMQB,OBJ,P-BUTS
|
|
ZERO? STACK \?CND3
|
|
INC 'MATCHES
|
|
PUTB P-MERGE,MATCHES,OBJ
|
|
?CND3: INC 'CNT
|
|
JUMP ?PRG1
|
|
?REP2: PUTB P-MERGE,P-MATCHLEN,MATCHES
|
|
SET 'NTBL,P-MERGE
|
|
SET 'P-MERGE,TBL
|
|
RETURN NTBL
|
|
|
|
|
|
.FUNCT ADJ-CHECK,WRD,ADJ,NW=0
|
|
ZERO? ADJ /TRUE
|
|
EQUAL? WRD,W?RHINO,W?BUFFALO /TRUE
|
|
EQUAL? WRD,W?BLOND,W?BLONDE /TRUE
|
|
EQUAL? WRD,W?FIRST,W?SECOND /TRUE
|
|
EQUAL? NW,W?OUTFIT /TRUE
|
|
CALL ZMEMQ,WRD,CHAR-POSS-TABLE
|
|
ZERO? STACK \TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT SNARFEM,PTR,EPTR,TBL,BUT=0,LEN,WV,WRD,NW,WAS-ALL=0,ONEOBJ
|
|
SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
SET 'P-AND,FALSE-VALUE
|
|
EQUAL? P-GETFLAGS,P-ALL \?CND1
|
|
SET 'WAS-ALL,TRUE-VALUE
|
|
?CND1: SET 'P-GETFLAGS,0
|
|
PUTB P-BUTS,P-MATCHLEN,0
|
|
PUTB TBL,P-MATCHLEN,0
|
|
GET PTR,0 >WRD
|
|
?PRG3: EQUAL? PTR,EPTR \?CCL7
|
|
ZERO? BUT /?PRD10
|
|
PUSH BUT
|
|
JUMP ?PEN8
|
|
?PRD10: PUSH TBL
|
|
?PEN8: CALL GET-OBJECT,STACK >WV
|
|
ZERO? WAS-ALL \?CCL12
|
|
RETURN WV
|
|
?CCL12: SET 'P-GETFLAGS,P-ALL
|
|
RETURN WV
|
|
?CCL7: ADD PTR,P-WORDLEN
|
|
EQUAL? EPTR,STACK \?CCL15
|
|
SET 'NW,0
|
|
JUMP ?CND13
|
|
?CCL15: GET PTR,P-LEXELEN >NW
|
|
?CND13: EQUAL? WRD,W?ALL \?CCL18
|
|
SET 'P-GETFLAGS,P-ALL
|
|
EQUAL? NW,W?OF \?CND5
|
|
ADD PTR,P-WORDLEN >PTR
|
|
JUMP ?CND5
|
|
?CCL18: EQUAL? WRD,W?BUT,W?EXCEPT \?CCL22
|
|
ZERO? BUT /?PRD27
|
|
PUSH BUT
|
|
JUMP ?PEN25
|
|
?PRD27: PUSH TBL
|
|
?PEN25: CALL GET-OBJECT,STACK
|
|
ZERO? STACK /FALSE
|
|
SET 'BUT,P-BUTS
|
|
PUTB BUT,P-MATCHLEN,0
|
|
JUMP ?CND5
|
|
?CCL22: EQUAL? WRD,W?A,W?ONE \?CCL29
|
|
ZERO? P-ADJ \?CCL32
|
|
SET 'P-GETFLAGS,P-ONE
|
|
EQUAL? NW,W?OF \?CND5
|
|
ADD PTR,P-WORDLEN >PTR
|
|
JUMP ?CND5
|
|
?CCL32: SET 'P-NAM,ONEOBJ
|
|
ZERO? BUT /?PRD39
|
|
PUSH BUT
|
|
JUMP ?PEN37
|
|
?PRD39: PUSH TBL
|
|
?PEN37: CALL GET-OBJECT,STACK
|
|
ZERO? STACK /FALSE
|
|
ZERO? NW \?CND5
|
|
RTRUE
|
|
?CCL29: EQUAL? WRD,W?AND,W?COMMA \?CCL43
|
|
EQUAL? NW,W?AND,W?COMMA /?CCL43
|
|
SET 'P-AND,TRUE-VALUE
|
|
ZERO? BUT /?PRD50
|
|
PUSH BUT
|
|
JUMP ?PEN48
|
|
?PRD50: PUSH TBL
|
|
?PEN48: CALL GET-OBJECT,STACK
|
|
ZERO? STACK \?CND5
|
|
RFALSE
|
|
?CCL43: CALL WT?,WRD,4
|
|
ZERO? STACK /?CCL52
|
|
CALL BUZZER-WORD?,WRD,PTR
|
|
ZERO? STACK /?CND5
|
|
RFALSE
|
|
?CCL52: EQUAL? WRD,W?AND,W?COMMA /?CND5
|
|
EQUAL? WRD,W?OF \?CCL57
|
|
ZERO? P-GETFLAGS \?CND5
|
|
SET 'P-GETFLAGS,P-INHIBIT
|
|
JUMP ?CND5
|
|
?CCL57: CALL WT?,WRD,32,2 >WV
|
|
ZERO? WV /?CCL61
|
|
CALL ADJ-CHECK,WRD,P-ADJ,NW
|
|
ZERO? STACK /?CCL61
|
|
EQUAL? NW,W?OF /?CCL61
|
|
SET 'P-ADJ,WV
|
|
SET 'P-ADJN,WRD
|
|
JUMP ?CND5
|
|
?CCL61: CALL WT?,WRD,128
|
|
ZERO? STACK /?CND5
|
|
SET 'P-NAM,WRD
|
|
SET 'ONEOBJ,WRD
|
|
?CND5: EQUAL? PTR,EPTR /?PRG3
|
|
ADD PTR,P-WORDLEN >PTR
|
|
SET 'WRD,NW
|
|
JUMP ?PRG3
|
|
|
|
|
|
.FUNCT RESOLVE-YOUR-HER-HIS,OBJ=0
|
|
EQUAL? P-ADJN,W?YOUR \?CCL3
|
|
EQUAL? WINNER,PLAYER /?CND1
|
|
SET 'OBJ,WINNER
|
|
JUMP ?CND1
|
|
?CCL3: EQUAL? P-ADJN,W?HER \?CCL7
|
|
SET 'OBJ,P-HER-OBJECT
|
|
JUMP ?CND1
|
|
?CCL7: EQUAL? P-ADJN,W?HIS \?CND1
|
|
SET 'OBJ,P-HIM-OBJECT
|
|
?CND1: ZERO? OBJ /FALSE
|
|
GETP OBJ,P?CHARACTER
|
|
ADD 1,STACK
|
|
GET CHAR-POSS-TABLE,STACK >P-ADJN
|
|
CALL WT?,P-ADJN,32,2 >P-ADJ
|
|
RETURN P-ADJ
|
|
|
|
|
|
.FUNCT GET-OBJECT,TBL,VRB=1,BTS,LEN,XBITS,TLEN,GCHECK=0,OLEN=0,OBJ=0,ADJ=0
|
|
SET 'XBITS,P-SLOCBITS
|
|
GETB TBL,P-MATCHLEN >TLEN
|
|
BTST P-GETFLAGS,P-INHIBIT /TRUE
|
|
EQUAL? P-ADJN,W?YOUR,W?HER,W?HIS \?CND3
|
|
ZERO? P-NAM /?CND3
|
|
CALL RESOLVE-YOUR-HER-HIS
|
|
?CND3: SET 'ADJ,P-ADJN
|
|
ZERO? P-NAM \?CND7
|
|
ZERO? P-ADJ /?CND7
|
|
CALL WT?,P-ADJN,128
|
|
ZERO? STACK /?CCL13
|
|
SET 'P-NAM,P-ADJN
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
?CND7: ZERO? P-NAM \?CND15
|
|
ZERO? P-ADJ \?CND15
|
|
EQUAL? P-GETFLAGS,P-ALL /?CND15
|
|
ZERO? P-GWIMBIT \?CND15
|
|
ZERO? VRB /FALSE
|
|
CALL MISSING,STR?31,ADJ
|
|
RFALSE
|
|
?CCL13: CALL WT?,P-ADJN,16,3 >BTS
|
|
ZERO? BTS /?CND7
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
PUTB TBL,P-MATCHLEN,1
|
|
PUTB TBL,1,INTDIR
|
|
SET 'P-DIRECTION,BTS
|
|
RTRUE
|
|
?CND15: EQUAL? P-GETFLAGS,P-ALL \?CCL24
|
|
ZERO? P-SLOCBITS \?CND23
|
|
?CCL24: SET 'P-SLOCBITS,-1
|
|
?CND23: SET 'P-TABLE,TBL
|
|
?PRG27: ZERO? GCHECK /?CCL31
|
|
CALL GLOBAL-CHECK,TBL
|
|
JUMP ?CND29
|
|
?CCL31: ZERO? LIT /?CND32
|
|
FCLEAR WINNER,OPENBIT
|
|
CALL DO-SL,HERE,SOG,SIR
|
|
FSET WINNER,OPENBIT
|
|
?CND32: CALL DO-SL,WINNER,SH,SC
|
|
?CND29: GETB TBL,P-MATCHLEN
|
|
SUB STACK,TLEN >LEN
|
|
BTST P-GETFLAGS,P-ALL /?CND34
|
|
BTST P-GETFLAGS,P-ONE \?CCL37
|
|
ZERO? LEN /?CCL37
|
|
EQUAL? LEN,1 /?CND40
|
|
RANDOM LEN
|
|
GETB TBL,STACK
|
|
PUTB TBL,1,STACK
|
|
GETB TBL,1
|
|
CALL TELL-I-ASSUME,STACK
|
|
?CND40: PUTB TBL,P-MATCHLEN,1
|
|
JUMP ?CND34
|
|
?CCL37: EQUAL? P-GETFLAGS,P-ALL /?CND34
|
|
GRTR? LEN,1 /?CCL42
|
|
ZERO? LEN \?CND34
|
|
EQUAL? P-SLOCBITS,-1 /?CND34
|
|
?CCL42: EQUAL? P-SLOCBITS,-1 \?CCL51
|
|
SET 'P-SLOCBITS,XBITS
|
|
SET 'OLEN,LEN
|
|
GETB TBL,P-MATCHLEN
|
|
SUB STACK,LEN
|
|
PUTB TBL,P-MATCHLEN,STACK
|
|
JUMP ?PRG27
|
|
?CCL51: CALL PUT-ADJ-NAM
|
|
ZERO? LEN \?CND52
|
|
SET 'LEN,OLEN
|
|
?CND52: GRTR? LEN,1 \?CCL56
|
|
GETB TBL,LEN >OBJ
|
|
ZERO? OBJ /?CCL56
|
|
GETP OBJ,P?GENERIC
|
|
CALL STACK,TBL,LEN >OBJ
|
|
ZERO? OBJ /?CCL56
|
|
EQUAL? OBJ,NOT-HERE-OBJECT /FALSE
|
|
EQUAL? OBJ,ROOMS \?CCL64
|
|
GETB TBL,P-MATCHLEN >LEN
|
|
JUMP ?CND54
|
|
?CCL64: ADD TLEN,1 >LEN
|
|
PUTB TBL,P-MATCHLEN,LEN
|
|
PUTB TBL,LEN,OBJ
|
|
SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
RTRUE
|
|
?CCL56: ZERO? VRB /?CND54
|
|
EQUAL? WINNER,PLAYER /?CND54
|
|
CALL MORE-SPECIFIC
|
|
RFALSE
|
|
?CND54: ZERO? VRB /?CCL70
|
|
ZERO? P-NAM /?CCL70
|
|
CALL WHICH-PRINT,TLEN,LEN,TBL
|
|
ZERO? STACK /?CND68
|
|
EQUAL? TBL,P-PRSO \?CCL78
|
|
SET 'P-ACLAUSE,P-NC1
|
|
JUMP ?CND76
|
|
?CCL78: SET 'P-ACLAUSE,P-NC2
|
|
?CND76: SET 'P-AADJ,P-ADJ
|
|
SET 'P-ANAM,P-NAM
|
|
CALL ORPHAN,FALSE-VALUE,FALSE-VALUE
|
|
SET 'P-OFLAG,TRUE-VALUE
|
|
JUMP ?CND68
|
|
?CCL70: ZERO? VRB /?CND68
|
|
CALL MISSING,STR?31,ADJ
|
|
?CND68: SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
RFALSE
|
|
?CND34: ZERO? LEN \?CCL82
|
|
ZERO? GCHECK /?CCL82
|
|
CALL PUT-ADJ-NAM
|
|
ZERO? VRB /?CND85
|
|
SET 'P-SLOCBITS,XBITS
|
|
ZERO? LIT \?CTR88
|
|
CALL SEE-VERB?
|
|
ZERO? STACK \?CCL89
|
|
?CTR88: CALL OBJ-FOUND,NOT-HERE-OBJECT,TBL
|
|
SET 'P-XNAM,P-NAM
|
|
SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-XADJ,P-ADJ
|
|
SET 'P-XADJN,P-ADJN
|
|
RTRUE
|
|
?CCL89: CALL TOO-DARK
|
|
?CND85: SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
RFALSE
|
|
?CCL82: ZERO? LEN \?CND80
|
|
SET 'GCHECK,TRUE-VALUE
|
|
JUMP ?PRG27
|
|
?CND80: ZERO? P-ADJ /?CND93
|
|
ZERO? P-NAM \?CND93
|
|
ADD TLEN,1
|
|
GETB TBL,STACK >OBJ
|
|
CALL TELL-I-ASSUME,OBJ
|
|
CALL THIS-IS-IT,OBJ
|
|
?CND93: SET 'P-SLOCBITS,XBITS
|
|
CALL PUT-ADJ-NAM
|
|
SET 'P-NAM,FALSE-VALUE
|
|
SET 'P-ADJ,FALSE-VALUE
|
|
SET 'P-ADJN,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT GENERIC-CLUE-FCN,TBL,LEN=0
|
|
EQUAL? PRSA,V?SEARCH-FOR,V?FIND \?CCL3
|
|
RETURN GENERIC-CLUE
|
|
?CCL3: ZERO? LEN \?CND4
|
|
GETB TBL,0 >LEN
|
|
?CND4: CALL PRUNE,TBL,LEN,CLUE-TEST >LEN
|
|
EQUAL? LEN,1 /?CTR7
|
|
RETURN ROOMS
|
|
?CTR7: GETB TBL,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CLUE-TEST,OBJ
|
|
IN? OBJ,WINNER /TRUE
|
|
ZERO? PRSI /?CCL6
|
|
IN? OBJ,PRSI /TRUE
|
|
?CCL6: EQUAL? OBJ,P-IT-OBJECT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT GENERIC-STAIRS,X,Y
|
|
EQUAL? PRSA,V?CLIMB-UP,V?CLIMB-DOWN,V?BOARD \?CCL3
|
|
RETURN STAIRS
|
|
?CCL3: RETURN BACKSTAIRS
|
|
|
|
|
|
.FUNCT GENERIC-CLOTHES,X,Y
|
|
EQUAL? PRSA,V?TAKE-OFF,V?REMOVE,V?CHANGE \FALSE
|
|
RETURN NOW-WEARING
|
|
|
|
|
|
.FUNCT GENERIC-CLOSET,TBL,LEN=0,N
|
|
CALL ZMEMQ,HERE,CHAR-ROOM-TABLE,CHARACTER-MAX >N
|
|
ZERO? N /?CCL3
|
|
GET CHAR-CLOSET-TABLE,N
|
|
RSTACK
|
|
?CCL3: ZERO? TBL /FALSE
|
|
CALL ZMEMQB,HERE,TBL
|
|
ZERO? STACK /?CND5
|
|
RETURN HERE
|
|
?CND5: ZERO? LEN \?CND7
|
|
GETB TBL,0 >LEN
|
|
?CND7: CALL PRUNE,TBL,LEN,NOT-SECRET-TEST >LEN
|
|
ZERO? LEN \?CCL11
|
|
PRINTI "(You haven't found a secret entrance yet!)"
|
|
CRLF
|
|
RETURN NOT-HERE-OBJECT
|
|
?CCL11: EQUAL? LEN,1 /?CTR14
|
|
RETURN ROOMS
|
|
?CTR14: GETB TBL,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT GENERIC-DINNER,X,Y
|
|
CALL REMOTE-VERB?
|
|
ZERO? STACK \?CTR2
|
|
EQUAL? PRSA,V?EXAMINE \?CCL3
|
|
?CTR2: RETURN DINNER
|
|
?CCL3: EQUAL? P-ADJ,FALSE-VALUE,A?MY \?CCL7
|
|
EQUAL? P-XADJ,FALSE-VALUE,A?MY \?CCL7
|
|
RETURN DINNER
|
|
?CCL7: SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTI "(That wouldn't be polite!)"
|
|
CRLF
|
|
RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT GENERIC-BEDROOM,TBL,N=0,RM
|
|
ZERO? N \?CND1
|
|
GETB TBL,P-MATCHLEN >N
|
|
?CND1: CALL ZMEMQ,HERE,CHAR-CLOSET-TABLE >RM
|
|
ZERO? RM /?CCL5
|
|
EQUAL? W?DOOR,P-NAM,P-XNAM \?CCL8
|
|
CALL FIND-FLAG-LG,HERE,DOORBIT
|
|
RSTACK
|
|
?CCL8: GET CHAR-ROOM-TABLE,RM
|
|
RSTACK
|
|
?CCL5: EQUAL? A?JACK'S,P-ADJ,P-XADJ \?CCL10
|
|
EQUAL? W?DOOR,P-NAM,P-XNAM \?CCL10
|
|
RETURN JACK-ROOM
|
|
?CCL10: CALL ZMEMQB,P-IT-OBJECT,TBL
|
|
ZERO? STACK /?CCL14
|
|
RETURN P-IT-OBJECT
|
|
?CCL14: CALL ZMEMQB,HERE,TBL
|
|
ZERO? STACK /?CCL16
|
|
RETURN HERE
|
|
?CCL16: CALL REMOTE-VERB?
|
|
ZERO? STACK /?CCL18
|
|
EQUAL? A?BATH,P-ADJ,P-XADJ \?CCL21
|
|
RETURN YOUR-BATHROOM
|
|
?CCL21: EQUAL? W?ROOM,P-NAM,P-XNAM \?CCL23
|
|
RETURN YOUR-ROOM
|
|
?CCL23: SET 'RM,FALSE-VALUE
|
|
JUMP ?CND3
|
|
?CCL18: EQUAL? HERE,GALLERY,YOUR-BATHROOM \?CCL25
|
|
RETURN YOUR-ROOM
|
|
?CCL25: CALL ZMEMQ,HERE,CHAR-ROOM-TABLE
|
|
ZERO? STACK /?CCL27
|
|
RETURN HERE
|
|
?CCL27: EQUAL? PRSA,V?WALK-TO,V?CLIMB-UP,V?CLIMB-DOWN \?PRG30
|
|
RETURN YOUR-ROOM
|
|
?PRG30: GETB TBL,N >RM
|
|
GETP RM,P?STATION
|
|
EQUAL? HERE,STACK /?CND3
|
|
DLESS? 'N,1 \?PRG30
|
|
SET 'RM,FALSE-VALUE
|
|
?CND3: ZERO? RM /?CCL38
|
|
RETURN RM
|
|
?CCL38: EQUAL? WINNER,FRIEND,LORD \FALSE
|
|
RETURN YOUR-ROOM
|
|
|
|
|
|
.FUNCT GENERIC-GREAT-HALL,X,Y
|
|
EQUAL? W?ROOM,P-NAM,P-XNAM \?CCL3
|
|
RETURN HERE
|
|
?CCL3: FSET? HERE,WEARBIT \?CCL5
|
|
RETURN GREAT-HALL
|
|
?CCL5: RETURN OLD-GREAT-HALL
|
|
|
|
|
|
.FUNCT GENERIC-LENS,X,Y
|
|
CALL REMOTE-VERB?
|
|
ZERO? STACK /?CCL3
|
|
RETURN LENS
|
|
?CCL3: FSET? LENS-2,SEENBIT /FALSE
|
|
RETURN LENS-1
|
|
|
|
|
|
.FUNCT GENERIC-RECORDER,X,Y
|
|
FSET? JACK-TAPE,SEENBIT /FALSE
|
|
RETURN RECORDER
|
|
|
|
|
|
.FUNCT GENERIC-BOX,X,Y
|
|
FSET? LENS-BOX,SECRETBIT \FALSE
|
|
RETURN VIVIEN-BOX
|
|
|
|
|
|
.FUNCT GENERIC-BOOK,X,Y
|
|
EQUAL? HERE,LIBRARY \FALSE
|
|
RETURN BOOKS-GLOBAL
|
|
|
|
|
|
.FUNCT GENERIC-WELL,X,Y
|
|
EQUAL? HERE,BASEMENT /FALSE
|
|
RETURN WELL
|
|
|
|
|
|
.FUNCT GENERIC-SKELETON,X,Y
|
|
FSET? SKELETON,SEENBIT \FALSE
|
|
RETURN SKELETON
|
|
|
|
|
|
.FUNCT GENERIC-ROOM,X,Y
|
|
RETURN GLOBAL-HERE
|
|
|
|
|
|
.FUNCT GENERIC-EYE,X,Y
|
|
EQUAL? W?EYE,P-NAM,P-XNAM \FALSE
|
|
RETURN GLASS-EYE
|
|
|
|
|
|
.FUNCT GENERIC-BELL,X,Y
|
|
CALL REMOTE-VERB?
|
|
ZERO? STACK /FALSE
|
|
RETURN BELL
|
|
|
|
|
|
.FUNCT GENERIC-WINE,X,Y
|
|
EQUAL? PRSA,V?TAKE \FALSE
|
|
RETURN BOTTLE
|
|
|
|
|
|
.FUNCT SPEAKING-VERB?,PER=0
|
|
EQUAL? PRSA,V?$CALL /?CTR2
|
|
EQUAL? PRSA,V?YES,V?TELL-ABOUT,V?TELL /?CTR2
|
|
EQUAL? PRSA,V?SORRY,V?REPLY,V?NO /?CTR2
|
|
EQUAL? PRSA,V?HELLO,V?FORGIVE,V?ASK-FOR /?CTR2
|
|
EQUAL? PRSA,V?ASK-ABOUT,V?ASK,V?ANSWER \?CCL3
|
|
?CTR2: EQUAL? PER,0,PRSO /TRUE
|
|
RFALSE
|
|
?CCL3: EQUAL? PRSA,V?TALK-ABOUT,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \FALSE
|
|
ZERO? PER /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT MISSING,NV,ADJ
|
|
PRINTI "[I think there's a "
|
|
PRINT NV
|
|
PRINTR " missing in that sentence!]"
|
|
|
|
|
|
.FUNCT WHICH-PRINT,TLEN,LEN,TBL,OBJ,RLEN
|
|
ZERO? LEN \?CND1
|
|
CALL MORE-SPECIFIC
|
|
RFALSE
|
|
?CND1: SET 'RLEN,LEN
|
|
EQUAL? WINNER,PLAYER /?PRG17
|
|
PRINTI """I don't understand "
|
|
EQUAL? P-NAM,W?DOOR \?PRG13
|
|
PRINTI "which door"
|
|
JUMP ?PRG15
|
|
?PRG13: PRINTI "if"
|
|
?PRG15: PRINTI " you mean"
|
|
JUMP ?CND3
|
|
?PRG17: PRINTI "[Which"
|
|
ZERO? P-OFLAG \?CTR20
|
|
ZERO? P-MERGED \?CTR20
|
|
ZERO? P-AND /?CCL21
|
|
?CTR20: ZERO? P-NAM /?PRG31
|
|
PRINTC 32
|
|
PRINTB P-NAM
|
|
JUMP ?PRG31
|
|
?CCL21: EQUAL? TBL,P-PRSO \?CCL30
|
|
CALL CLAUSE-PRINT,P-NC1,P-NC1L,FALSE-VALUE
|
|
JUMP ?PRG31
|
|
?CCL30: CALL CLAUSE-PRINT,P-NC2,P-NC2L,FALSE-VALUE
|
|
?PRG31: PRINTI " do you mean"
|
|
EQUAL? P-NAM,W?DOOR /?CND3
|
|
PRINTC 44
|
|
?CND3: EQUAL? P-NAM,W?DOOR /?CND37
|
|
?PRG39: INC 'TLEN
|
|
GETB TBL,TLEN >OBJ
|
|
CALL PRINTT,OBJ
|
|
EQUAL? LEN,2 \?CCL45
|
|
EQUAL? RLEN,2 /?PRG50
|
|
PRINTC 44
|
|
?PRG50: PRINTI " or"
|
|
JUMP ?CND43
|
|
?CCL45: GRTR? LEN,2 \?CND43
|
|
PRINTC 44
|
|
?CND43: DLESS? 'LEN,1 \?PRG39
|
|
?CND37: EQUAL? WINNER,PLAYER /?PRG62
|
|
PRINTR "."""
|
|
?PRG62: PRINTR "?]"
|
|
|
|
|
|
.FUNCT GLOBAL-SEARCH,TBL,RMG,CNT,OBJ
|
|
PTSIZE RMG
|
|
SUB STACK,1 >CNT
|
|
?PRG1: GETB RMG,CNT >OBJ
|
|
CALL THIS-IT?,OBJ
|
|
ZERO? STACK /?CND3
|
|
CALL OBJ-FOUND,OBJ,TBL
|
|
?CND3: DLESS? 'CNT,0 \?PRG1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT GLOBAL-CHECK,TBL,LEN,RMG,RMGL,CNT=0,OBITS,FOO
|
|
GETB TBL,P-MATCHLEN >LEN
|
|
SET 'OBITS,P-SLOCBITS
|
|
GETPT HERE,P?GLOBAL >RMG
|
|
ZERO? RMG /?CND1
|
|
CALL GLOBAL-SEARCH,TBL,RMG
|
|
?CND1: EQUAL? P-NAM,W?DOOR /?CND3
|
|
CALL THIS-IT?,HERE
|
|
ZERO? STACK /?CND5
|
|
CALL ZMEMQB,HERE,TBL
|
|
ZERO? STACK \?CND5
|
|
CALL OBJ-FOUND,HERE,TBL
|
|
?CND5: EQUAL? PRSA,V?THROUGH,V?LOOK-INSIDE,V?EXAMINE /?CCL10
|
|
EQUAL? PRSA,V?CLIMB-UP,V?CLIMB-DOWN,V?BOARD \?CND3
|
|
?CCL10: CALL ROOM-SEARCH,TBL
|
|
?CND3: GETP HERE,P?THINGS >RMG
|
|
ZERO? RMG /?CND13
|
|
GET RMG,0 >RMGL
|
|
SET 'CNT,0
|
|
?PRG15: ADD CNT,1
|
|
GET RMG,STACK
|
|
EQUAL? P-NAM,STACK \?CND17
|
|
ZERO? P-ADJ /?CCL18
|
|
ADD CNT,2
|
|
GET RMG,STACK
|
|
EQUAL? P-ADJN,STACK \?CND17
|
|
?CCL18: SET 'LAST-PSEUDO-LOC,HERE
|
|
ADD CNT,3
|
|
GET RMG,STACK
|
|
PUTP PSEUDO-OBJECT,P?ACTION,STACK
|
|
GETPT PSEUDO-OBJECT,P?ACTION
|
|
SUB STACK,5 >FOO
|
|
GET P-NAM,0
|
|
PUT FOO,0,STACK
|
|
GET P-NAM,1
|
|
PUT FOO,1,STACK
|
|
CALL OBJ-FOUND,PSEUDO-OBJECT,TBL
|
|
JUMP ?CND13
|
|
?CND17: ADD CNT,3 >CNT
|
|
LESS? CNT,RMGL /?PRG15
|
|
?CND13: GETB TBL,P-MATCHLEN
|
|
EQUAL? STACK,LEN \FALSE
|
|
SET 'P-SLOCBITS,-1
|
|
SET 'P-TABLE,TBL
|
|
CALL DO-SL,GLOBAL-OBJECTS,1,1
|
|
SET 'P-SLOCBITS,OBITS
|
|
GETB TBL,P-MATCHLEN
|
|
ZERO? STACK \FALSE
|
|
EQUAL? PRSA,V?WALK-TO,V?THROUGH /?CCL33
|
|
EQUAL? PRSA,V?TAKE-TO,V?SSHOW,V?SHOW /?CCL33
|
|
EQUAL? PRSA,V?FIND,V?CLIMB-UP,V?CLIMB-DOWN \FALSE
|
|
?CCL33: CALL SEARCH-LIST,ROOMS,P-TABLE,P-SRCTOP
|
|
RSTACK
|
|
|
|
|
|
.FUNCT DO-SL,OBJ,BIT1,BIT2,BITS
|
|
ADD BIT1,BIT2
|
|
BTST P-SLOCBITS,STACK \?CCL3
|
|
CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCALL
|
|
RSTACK
|
|
?CCL3: BTST P-SLOCBITS,BIT1 \?CCL6
|
|
CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCTOP
|
|
RSTACK
|
|
?CCL6: BTST P-SLOCBITS,BIT2 \TRUE
|
|
CALL SEARCH-LIST,OBJ,P-TABLE,P-SRCBOT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT SEARCH-LIST,OBJ,TBL,LVL
|
|
FIRST? OBJ >OBJ \FALSE
|
|
?PRG4: EQUAL? LVL,P-SRCBOT /?CND6
|
|
CALL THIS-IT?,OBJ
|
|
ZERO? STACK /?CND6
|
|
CALL OBJ-FOUND,OBJ,TBL
|
|
?CND6: ZERO? LVL \?PRD13
|
|
FSET? OBJ,SEARCHBIT /?PRD13
|
|
FSET? OBJ,SURFACEBIT \?CND10
|
|
?PRD13: FIRST? OBJ \?CND10
|
|
FSET? OBJ,OPENBIT /?CCL11
|
|
FSET? OBJ,TRANSBIT /?CCL11
|
|
ZERO? P-MOBY-FLAG \?CCL11
|
|
FSET? OBJ,PERSONBIT \?CND10
|
|
EQUAL? OBJ,WINNER /?CND10
|
|
?CCL11: FSET? OBJ,SURFACEBIT \?CCL26
|
|
PUSH P-SRCALL
|
|
JUMP ?CND24
|
|
?CCL26: FSET? OBJ,SEARCHBIT \?CCL28
|
|
PUSH P-SRCALL
|
|
JUMP ?CND24
|
|
?CCL28: PUSH P-SRCTOP
|
|
?CND24: CALL SEARCH-LIST,OBJ,TBL,STACK
|
|
?CND10: NEXT? OBJ >OBJ /?PRG4
|
|
RTRUE
|
|
|
|
|
|
.FUNCT ROOM-SEARCH,TTBL,P=0,L,TBL,O
|
|
CALL CORRIDOR-LOOK,ROOMS >O
|
|
ZERO? O /?PRG3
|
|
CALL OBJ-FOUND,O,TTBL
|
|
?PRG3: NEXTP HERE,P >P
|
|
ZERO? P /FALSE
|
|
LESS? P,LOW-DIRECTION /FALSE
|
|
GETPT HERE,P >TBL
|
|
PTSIZE TBL >L
|
|
GETB TBL,REXIT >O
|
|
CALL ZMEMQB,O,TTBL
|
|
ZERO? STACK \?PRG3
|
|
EQUAL? L,UEXIT \?CCL13
|
|
CALL THIS-IT?,O
|
|
ZERO? STACK /?PRG3
|
|
CALL OBJ-FOUND,O,TTBL
|
|
JUMP ?PRG3
|
|
?CCL13: EQUAL? L,DEXIT \?CCL17
|
|
GETB TBL,DEXITOBJ
|
|
FSET? STACK,OPENBIT \?PRG3
|
|
CALL THIS-IT?,O
|
|
ZERO? STACK /?PRG3
|
|
CALL OBJ-FOUND,O,TTBL
|
|
JUMP ?PRG3
|
|
?CCL17: EQUAL? L,CEXIT \?PRG3
|
|
GETB TBL,CEXITFLAG
|
|
VALUE STACK
|
|
ZERO? STACK /?PRG3
|
|
CALL THIS-IT?,O
|
|
ZERO? STACK /?PRG3
|
|
CALL OBJ-FOUND,O,TTBL
|
|
JUMP ?PRG3
|
|
|
|
|
|
.FUNCT THIS-IT?,OBJ,SYNS
|
|
FSET? OBJ,INVISIBLE /FALSE
|
|
ZERO? P-NAM /?CCL5
|
|
GETPT OBJ,P?SYNONYM >SYNS
|
|
ZERO? SYNS /FALSE
|
|
PTSIZE SYNS
|
|
DIV STACK,2
|
|
SUB STACK,1
|
|
CALL ZMEMQ,P-NAM,SYNS,STACK
|
|
ZERO? STACK /FALSE
|
|
?CCL5: ZERO? P-ADJ /?CCL11
|
|
GETPT OBJ,P?ADJECTIVE >SYNS
|
|
ZERO? SYNS /FALSE
|
|
PTSIZE SYNS
|
|
SUB STACK,1
|
|
CALL ZMEMQB,P-ADJ,SYNS,STACK
|
|
ZERO? STACK /FALSE
|
|
?CCL11: ZERO? P-GWIMBIT /TRUE
|
|
FSET? OBJ,P-GWIMBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT OBJ-FOUND,OBJ,TBL,PTR
|
|
EQUAL? OBJ,NOT-HERE-OBJECT /?CND1
|
|
CALL ZMEMQB,OBJ,TBL
|
|
ZERO? STACK \FALSE
|
|
?CND1: GETB TBL,P-MATCHLEN >PTR
|
|
INC 'PTR
|
|
PUTB TBL,PTR,OBJ
|
|
PUTB TBL,P-MATCHLEN,PTR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT TAKE-CHECK
|
|
GETB P-SYNTAX,P-SLOC1
|
|
CALL ITAKE-CHECK,P-PRSO,STACK
|
|
ZERO? STACK /FALSE
|
|
GETB P-SYNTAX,P-SLOC2
|
|
CALL ITAKE-CHECK,P-PRSI,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT ITAKE-CHECK,TBL,BITS,PTR,OBJ,TAKEN
|
|
GETB TBL,P-MATCHLEN >PTR
|
|
ZERO? PTR /TRUE
|
|
BTST BITS,SHAVE /?PRG8
|
|
BTST BITS,STAKE \TRUE
|
|
?PRG8: DLESS? 'PTR,0 /TRUE
|
|
ADD PTR,1
|
|
GETB TBL,STACK >OBJ
|
|
EQUAL? OBJ,IT \?CCL14
|
|
CALL ACCESSIBLE?,P-IT-OBJECT
|
|
ZERO? STACK \?CCL17
|
|
CALL MORE-SPECIFIC
|
|
RFALSE
|
|
?CCL17: SET 'OBJ,P-IT-OBJECT
|
|
JUMP ?CND12
|
|
?CCL14: EQUAL? OBJ,HER \?CCL19
|
|
CALL ACCESSIBLE?,P-HER-OBJECT
|
|
ZERO? STACK \?CCL22
|
|
CALL MORE-SPECIFIC
|
|
RFALSE
|
|
?CCL22: SET 'OBJ,P-HER-OBJECT
|
|
JUMP ?CND12
|
|
?CCL19: EQUAL? OBJ,HIM \?CND12
|
|
CALL ACCESSIBLE?,P-HIM-OBJECT
|
|
ZERO? STACK \?CCL26
|
|
CALL MORE-SPECIFIC
|
|
RFALSE
|
|
?CCL26: SET 'OBJ,P-HIM-OBJECT
|
|
?CND12: CALL HELD?,OBJ,WINNER
|
|
ZERO? STACK \?PRG8
|
|
EQUAL? OBJ,HANDS,ROOMS /?PRG8
|
|
SET 'PRSO,OBJ
|
|
FSET? OBJ,TRYTAKEBIT \?CCL33
|
|
SET 'TAKEN,TRUE-VALUE
|
|
JUMP ?CND31
|
|
?CCL33: EQUAL? WINNER,PLAYER /?CCL35
|
|
SET 'TAKEN,FALSE-VALUE
|
|
JUMP ?CND31
|
|
?CCL35: BTST BITS,STAKE \?CCL37
|
|
CALL ITAKE,FALSE-VALUE
|
|
EQUAL? STACK,TRUE-VALUE \?CCL37
|
|
SET 'TAKEN,FALSE-VALUE
|
|
JUMP ?CND31
|
|
?CCL37: SET 'TAKEN,TRUE-VALUE
|
|
?CND31: ZERO? TAKEN /?PRG8
|
|
BTST BITS,SHAVE \?PRG8
|
|
PRINTC 40
|
|
CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1
|
|
PRINTI "n't holding"
|
|
GETB TBL,P-MATCHLEN
|
|
LESS? 1,STACK \?CCL50
|
|
PRINTI " those things"
|
|
JUMP ?PRG59
|
|
?CCL50: EQUAL? OBJ,NOT-HERE-OBJECT \?PRG57
|
|
PRINTI " that"
|
|
JUMP ?PRG59
|
|
?PRG57: CALL PRINTT,OBJ
|
|
CALL THIS-IS-IT,OBJ
|
|
?PRG59: PRINTI "!)"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT MANY-CHECK,LOSS=0,TMP,?TMP1
|
|
GETB P-PRSO,P-MATCHLEN
|
|
GRTR? STACK,1 \?CCL3
|
|
GETB P-SYNTAX,P-SLOC1
|
|
BTST STACK,SMANY /?CCL3
|
|
SET 'LOSS,1
|
|
JUMP ?CND1
|
|
?CCL3: GETB P-PRSI,P-MATCHLEN
|
|
GRTR? STACK,1 \?CND1
|
|
GETB P-SYNTAX,P-SLOC2
|
|
BTST STACK,SMANY /?CND1
|
|
SET 'LOSS,2
|
|
?CND1: ZERO? LOSS /TRUE
|
|
PRINTI "[You can't use more than one "
|
|
EQUAL? LOSS,2 \?PRG19
|
|
PRINTI "in"
|
|
?PRG19: PRINTI "direct object with """
|
|
GET P-ITBL,P-VERBN >TMP
|
|
ZERO? TMP \?CCL23
|
|
PRINTI "tell"
|
|
JUMP ?PRG30
|
|
?CCL23: ZERO? P-OFLAG \?CTR26
|
|
ZERO? P-MERGED /?CCL27
|
|
?CTR26: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?PRG30
|
|
?CCL27: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
CALL WORD-PRINT,?TMP1,STACK
|
|
?PRG30: PRINTI """!]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ZMEMQ,ITM,TBL,SIZE=-1,CNT=1
|
|
ZERO? TBL /FALSE
|
|
LESS? SIZE,0 /?CCL5
|
|
SET 'CNT,0
|
|
JUMP ?PRG8
|
|
?CCL5: GET TBL,0 >SIZE
|
|
GRTR? SIZE,0 \FALSE
|
|
?PRG8: GET TBL,CNT
|
|
EQUAL? ITM,STACK \?CCL12
|
|
ZERO? CNT /TRUE
|
|
RETURN CNT
|
|
?CCL12: IGRTR? 'CNT,SIZE \?PRG8
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ZMEMQB,ITM,TBL,SIZE=-1,CNT=1
|
|
ZERO? TBL /FALSE
|
|
LESS? SIZE,0 /?CCL5
|
|
SET 'CNT,0
|
|
JUMP ?PRG8
|
|
?CCL5: GETB TBL,0 >SIZE
|
|
GRTR? SIZE,0 \FALSE
|
|
?PRG8: GETB TBL,CNT
|
|
EQUAL? ITM,STACK \?CCL12
|
|
ZERO? CNT /TRUE
|
|
RETURN CNT
|
|
?CCL12: IGRTR? 'CNT,SIZE \?PRG8
|
|
RFALSE
|
|
|
|
|
|
.FUNCT LIT?,RM=0,RMBIT=0,OHERE,LIT=0,P=0,TBL,L
|
|
ZERO? RM \?CND1
|
|
SET 'RM,HERE
|
|
?CND1: ZERO? RMBIT /?CND3
|
|
FSET? RM,ONBIT \FALSE
|
|
RETURN RM
|
|
?CND3: FSET? RM,ONBIT \?CCL10
|
|
SET 'LIT,RM
|
|
JUMP ?CND8
|
|
?CCL10: SET 'P-GWIMBIT,ONBIT
|
|
SET 'OHERE,HERE
|
|
SET 'HERE,RM
|
|
PUTB P-MERGE,P-MATCHLEN,0
|
|
SET 'P-TABLE,P-MERGE
|
|
SET 'P-SLOCBITS,-1
|
|
CALL SEARCH-LIST,RM,P-TABLE,P-SRCALL
|
|
GETB P-MERGE,P-MATCHLEN
|
|
ZERO? STACK /?CND11
|
|
GETB P-MERGE,1 >LIT
|
|
?CND11: SET 'HERE,OHERE
|
|
SET 'P-GWIMBIT,0
|
|
?CND8: ZERO? LIT /?CCL15
|
|
RETURN LIT
|
|
?CCL15: EQUAL? RM,GALLERY-CORNER \?PRG20
|
|
FSET? GALLERY,ONBIT \?PRG20
|
|
RETURN GALLERY
|
|
?PRG20: NEXTP RM,P >P
|
|
ZERO? P /FALSE
|
|
EQUAL? P,P?UP,P?DOWN /?PRG20
|
|
LESS? P,LOW-DIRECTION /?PRG20
|
|
GETPT RM,P >TBL
|
|
PTSIZE TBL >L
|
|
GETB TBL,REXIT >OHERE
|
|
EQUAL? L,UEXIT \?CCL30
|
|
CALL LIT?,OHERE,TRUE-VALUE
|
|
ZERO? STACK /?CCL30
|
|
RETURN OHERE
|
|
?CCL30: EQUAL? L,DEXIT \?CCL34
|
|
GETB TBL,DEXITOBJ
|
|
FSET? STACK,OPENBIT \?CCL34
|
|
CALL LIT?,OHERE,TRUE-VALUE
|
|
ZERO? STACK /?CCL34
|
|
RETURN OHERE
|
|
?CCL34: EQUAL? L,CEXIT \?PRG20
|
|
GETB TBL,CEXITFLAG
|
|
VALUE STACK
|
|
ZERO? STACK /?PRG20
|
|
CALL LIT?,OHERE,TRUE-VALUE
|
|
ZERO? STACK /?PRG20
|
|
RETURN OHERE
|
|
|
|
|
|
.FUNCT NOT-HERE,OBJ,CLOCK=0
|
|
ZERO? CLOCK \?PRG5
|
|
SET 'CLOCK-WAIT,TRUE-VALUE
|
|
PRINTC 40
|
|
?PRG5: CALL START-SENTENCE,OBJ
|
|
PRINTI " isn't "
|
|
CALL VISIBLE?,OBJ
|
|
ZERO? STACK /?PRG18
|
|
PRINTI "close enough"
|
|
CALL SPEAKING-VERB?
|
|
ZERO? STACK /?PRG16
|
|
PRINTI " to hear you"
|
|
?PRG16: PRINTC 46
|
|
JUMP ?CND7
|
|
?PRG18: PRINTI "here!"
|
|
?CND7: CALL THIS-IS-IT,OBJ
|
|
ZERO? CLOCK \?CND20
|
|
PRINTC 41
|
|
?CND20: CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PUT-ADJ-NAM
|
|
EQUAL? P-NAM,W?IT,W?HIM,W?HER /FALSE
|
|
PUT P-NAMW,P-PHR,P-NAM
|
|
PUT P-ADJW,P-PHR,P-ADJN
|
|
RTRUE
|
|
|
|
|
|
.FUNCT NOUN-USED?,WORD1,WORD2=1,WORD3=1
|
|
ZERO? NOW-PRSI \?CCL3
|
|
GET P-NAMW,0
|
|
EQUAL? STACK,WORD1,WORD2,WORD3 /TRUE
|
|
GET P-OFW,0
|
|
EQUAL? STACK,WORD1,WORD2,WORD3 /TRUE
|
|
RFALSE
|
|
?CCL3: GET P-NAMW,1
|
|
EQUAL? STACK,WORD1,WORD2,WORD3 /TRUE
|
|
GET P-OFW,1
|
|
EQUAL? STACK,WORD1,WORD2,WORD3 /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT ADJ-USED?,WORD1=1,WORD2=1,WORD3=1
|
|
ZERO? NOW-PRSI \?CCL3
|
|
EQUAL? WORD1,1 \?CCL6
|
|
GET P-ADJW,0
|
|
RSTACK
|
|
?CCL6: GET P-ADJW,0
|
|
EQUAL? STACK,WORD1,WORD2,WORD3 /TRUE
|
|
RFALSE
|
|
?CCL3: EQUAL? WORD1,1 \?CCL11
|
|
GET P-ADJW,1
|
|
RSTACK
|
|
?CCL11: GET P-ADJW,1
|
|
EQUAL? STACK,WORD1,WORD2,WORD3 /TRUE
|
|
RFALSE
|
|
|
|
.ENDI
|