mirror of
https://github.com/historicalsource/sherlock
synced 2024-07-02 22:55:22 +03:00
2589 lines
60 KiB
Plaintext
2589 lines
60 KiB
Plaintext
|
|
|
|
.FUNCT RT-CAPITALIZE,PTR,?TMP1
|
|
ZERO? GL-P-ORPH \?CTR2
|
|
ZERO? GL-P-MERGED /?CCL3
|
|
?CTR2: GET PTR,0
|
|
PRINTB STACK
|
|
RTRUE
|
|
?CCL3: GETB PTR,3
|
|
GETB GL-P-PIBUF,STACK
|
|
SUB STACK,32
|
|
PRINTC STACK
|
|
GETB PTR,2
|
|
SUB STACK,1 >?TMP1
|
|
GETB PTR,3
|
|
ADD STACK,1
|
|
CALL RT-WORD-PRINT,?TMP1,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-WORD-PRINT,CNT,BUF
|
|
ADD GL-P-PIBUF,BUF
|
|
PRINTT STACK,CNT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-VERB-PRINT,TMP,?TMP1
|
|
GET GL-P-ITBL,K-P-VERBN >TMP
|
|
ZERO? TMP \?CCL3
|
|
PRINTI "tell"
|
|
RTRUE
|
|
?CCL3: GETB GL-P-VTBL,2
|
|
ZERO? STACK \?CCL5
|
|
GET TMP,0
|
|
PRINTB STACK
|
|
RTRUE
|
|
?CCL5: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
ICALL RT-WORD-PRINT,?TMP1,STACK
|
|
PUTB GL-P-VTBL,2,0
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-PREP-PRINT,PREP,SP?,WRD
|
|
ASSIGNED? 'SP? /?CND1
|
|
SET 'SP?,TRUE-VALUE
|
|
?CND1: ZERO? PREP /FALSE
|
|
ZERO? GL-P-END-ON-PREP \FALSE
|
|
ZERO? SP? /?CND8
|
|
PRINTC 32
|
|
?CND8: CALL2 RT-PREP-FIND,PREP >WRD
|
|
PRINTB WRD
|
|
GET GL-P-ITBL,K-P-VERBN
|
|
GET STACK,0
|
|
EQUAL? W?SIT,STACK \?CND10
|
|
EQUAL? W?DOWN,WRD \?CND10
|
|
PRINTI " on"
|
|
?CND10: GET GL-P-ITBL,K-P-VERBN
|
|
GET STACK,0
|
|
EQUAL? W?GET,STACK \TRUE
|
|
EQUAL? W?OUT,WRD \TRUE
|
|
PRINTI " of"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-CLAUSE-PRINT,BPTR,EPTR,THE?,?TMP1
|
|
ASSIGNED? 'THE? /?CND1
|
|
SET 'THE?,TRUE-VALUE
|
|
?CND1: GET GL-P-ITBL,BPTR >?TMP1
|
|
GET GL-P-ITBL,EPTR
|
|
CALL RT-BUFFER-PRINT,?TMP1,STACK,THE?
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-BUFFER-PRINT,BEG,END,CP,NOSP,WRD,FIRST??,PN,?TMP1
|
|
SET 'FIRST??,TRUE-VALUE
|
|
?PRG1: EQUAL? BEG,END /TRUE
|
|
ZERO? NOSP /?CCL8
|
|
SET 'NOSP,FALSE-VALUE
|
|
JUMP ?CND6
|
|
?CCL8: PRINTC 32
|
|
?CND6: GET BEG,0 >WRD
|
|
EQUAL? WRD,W?HIM \?PRD12
|
|
CALL2 RT-VISIBLE?,GL-P-HIM-OBJECT
|
|
ZERO? STACK /?CCL10
|
|
?PRD12: EQUAL? WRD,W?HER \?PRD15
|
|
CALL2 RT-VISIBLE?,GL-P-HER-OBJECT
|
|
ZERO? STACK /?CCL10
|
|
?PRD15: EQUAL? WRD,W?THEM \?CND9
|
|
CALL2 RT-VISIBLE?,GL-P-THEM-OBJECT
|
|
ZERO? STACK \?CND9
|
|
?CCL10: SET 'PN,TRUE-VALUE
|
|
?CND9: EQUAL? WRD,W?PERIOD \?CCL22
|
|
SET 'NOSP,TRUE-VALUE
|
|
JUMP ?CND3
|
|
?CCL22: EQUAL? WRD,W?ALL,W?OF /?CCL24
|
|
GETB WRD,6
|
|
BAND STACK,12
|
|
ZERO? STACK /?CCL24
|
|
GETB WRD,6
|
|
BAND STACK,160
|
|
ZERO? STACK \?CCL24
|
|
SET 'NOSP,TRUE-VALUE
|
|
JUMP ?CND3
|
|
?CCL24: EQUAL? WRD,W?ME \?CCL29
|
|
ICALL2 DPRINT,CH-PLAYER
|
|
SET 'PN,TRUE-VALUE
|
|
JUMP ?CND3
|
|
?CCL29: INTBL? WRD,K-CAPS+2,18 \?CCL31
|
|
ICALL2 RT-CAPITALIZE,BEG
|
|
SET 'PN,TRUE-VALUE
|
|
JUMP ?CND3
|
|
?CCL31: ZERO? FIRST?? /?CND32
|
|
ZERO? PN \?CND32
|
|
ZERO? CP /?CND32
|
|
PRINTI "the "
|
|
?CND32: ZERO? GL-P-ORPH \?CTR38
|
|
ZERO? GL-P-MERGED /?CCL39
|
|
?CTR38: PRINTB WRD
|
|
JUMP ?CND37
|
|
?CCL39: EQUAL? WRD,W?IT \?CCL43
|
|
CALL2 RT-VISIBLE?,GL-P-IT-OBJECT
|
|
ZERO? STACK /?CCL43
|
|
ICALL2 DPRINT,GL-P-IT-OBJECT
|
|
JUMP ?CND37
|
|
?CCL43: EQUAL? WRD,W?HER \?CCL47
|
|
ZERO? PN \?CCL47
|
|
ICALL2 DPRINT,GL-P-HER-OBJECT
|
|
JUMP ?CND37
|
|
?CCL47: EQUAL? WRD,W?THEM \?CCL51
|
|
ZERO? PN \?CCL51
|
|
ICALL2 DPRINT,GL-P-THEM-OBJECT
|
|
JUMP ?CND37
|
|
?CCL51: EQUAL? WRD,W?HIM \?CCL55
|
|
ZERO? PN \?CCL55
|
|
ICALL2 DPRINT,GL-P-HIM-OBJECT
|
|
JUMP ?CND37
|
|
?CCL55: GETB BEG,2 >?TMP1
|
|
GETB BEG,3
|
|
ICALL RT-WORD-PRINT,?TMP1,STACK
|
|
?CND37: SET 'FIRST??,FALSE-VALUE
|
|
?CND3: ADD BEG,K-P-WORDLEN >BEG
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT RT-DONT-KNOW-WORD-MSG,PTR,BUF,MSG,?TMP1
|
|
ZERO? GL-LONG-OOPS \?CCL3
|
|
PRINTI "[You don't need to use the word """
|
|
JUMP ?CND1
|
|
?CCL3: DEC 'GL-LONG-OOPS
|
|
PRINTI "[You can play the game from start to finish, solve all the puzzles, get all the points, and STILL never need to use the word """
|
|
?CND1: MUL PTR,2 >BUF
|
|
ADD GL-P-P-LEX,BUF
|
|
GETB STACK,2 >?TMP1
|
|
ADD GL-P-P-LEX,BUF
|
|
GETB STACK,3
|
|
ICALL RT-WORD-PRINT,?TMP1,STACK
|
|
PRINTI """.]"
|
|
CRLF
|
|
PUT GL-OOPS-TABLE,K-O-PTR,PTR
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
SET 'GL-P-ORPH,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-DONT-KNOW-WORD-USE-MSG,PTR,BUF,?TMP1
|
|
PRINTI "[This story cannot understand the word """
|
|
MUL PTR,2 >BUF
|
|
ADD GL-P-P-LEX,BUF
|
|
GETB STACK,2 >?TMP1
|
|
ADD GL-P-P-LEX,BUF
|
|
GETB STACK,3
|
|
ICALL RT-WORD-PRINT,?TMP1,STACK
|
|
PRINTI """ when you use it that way.]"
|
|
CRLF
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
SET 'GL-P-ORPH,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-CANT-SEE-ANY-MSG,THING,STRING?,PRSO?,WRD
|
|
ASSIGNED? 'PRSO? /?CND1
|
|
SET 'PRSO?,TRUE-VALUE
|
|
?CND1: ICALL1 RT-CYOU-MSG
|
|
PRINTI "cannot "
|
|
EQUAL? GL-PRSA,V?LISTEN \?CCL5
|
|
PRINTI "hear"
|
|
JUMP ?CND3
|
|
?CCL5: EQUAL? GL-PRSA,V?SMELL \?CCL7
|
|
PRINTI "smell"
|
|
JUMP ?CND3
|
|
?CCL7: PRINTI "see"
|
|
?CND3: ZERO? STRING? /?CCL10
|
|
PRINT STRING?
|
|
JUMP ?CND8
|
|
?CCL10: ZERO? THING /?CCL12
|
|
EQUAL? THING,TH-NOT-HERE-OBJECT /?CCL12
|
|
PRINTC 32
|
|
ICALL RT-THEO-PRINT,THING,FALSE-VALUE,K-DESC-ANY
|
|
JUMP ?CND8
|
|
?CCL12: ZERO? THING /?CND15
|
|
EQUAL? GL-PRSI,TH-NOT-HERE-OBJECT \?CND15
|
|
SET 'PRSO?,FALSE-VALUE
|
|
?CND15: ZERO? PRSO? /?CCL21
|
|
PUSH 0
|
|
JUMP ?CND19
|
|
?CCL21: PUSH 1
|
|
?CND19: GET GL-P-NAMW,STACK >WRD
|
|
INTBL? WRD,K-CAPS+2,18 /?CND22
|
|
PRINTI " any"
|
|
?CND22: ICALL2 RT-NOT-HERE-PRINT,PRSO?
|
|
?CND8: PRINTI " here."
|
|
CRLF
|
|
SET 'GL-P-IT-OBJECT,TH-NOT-HERE-OBJECT
|
|
ICALL1 RT-P-CLEAR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-TH-NOT-HERE-OBJECT,TBL,PRSO?,OBJ
|
|
SET 'PRSO?,TRUE-VALUE
|
|
EQUAL? GL-PRSO,TH-NOT-HERE-OBJECT \?CCL3
|
|
EQUAL? GL-PRSI,TH-NOT-HERE-OBJECT \?CCL3
|
|
PRINTR "Those things aren't here."
|
|
?CCL3: EQUAL? GL-PRSO,TH-NOT-HERE-OBJECT \?CCL7
|
|
SET 'TBL,GL-P-PRSO
|
|
JUMP ?CND1
|
|
?CCL7: SET 'TBL,GL-P-PRSI
|
|
SET 'PRSO?,FALSE-VALUE
|
|
?CND1: ZERO? PRSO? /?CCL10
|
|
EQUAL? GL-PRSA,V?FIND,V?WHO,V?WHAT /?CCL12
|
|
EQUAL? GL-PRSA,V?WHERE,V?WAIT-FOR,V?WAIT /?CCL12
|
|
EQUAL? GL-PRSA,V?SAY,V?DRIVE,V?CALL /?CCL12
|
|
EQUAL? GL-PRSA,V?MAKE,V?PASSWORD,V?WALK-TO /?CCL12
|
|
EQUAL? GL-PRSA,V?TAKE \?CND8
|
|
EQUAL? GL-PLACE-CUR,RM-DIOGENES-CLUB \?PRD21
|
|
EQUAL? GL-WINNER,CH-BUTLER /?CCL12
|
|
?PRD21: EQUAL? GL-PLACE-CUR,RM-SHERMANS-HOUSE \?CND8
|
|
EQUAL? GL-WINNER,CH-SHERMAN \?CND8
|
|
?CCL12: CALL RT-FIND-NOT-HERE,TBL,PRSO? >OBJ
|
|
ZERO? OBJ /FALSE
|
|
EQUAL? OBJ,TH-NOT-HERE-OBJECT /?CND8
|
|
RETURN 2
|
|
?CCL10: EQUAL? GL-PRSA,V?TELL-ABOUT,V?ASK-ABOUT,V?ASK-FOR \?CND8
|
|
CALL RT-FIND-NOT-HERE,TBL,PRSO? >OBJ
|
|
ZERO? OBJ /FALSE
|
|
EQUAL? OBJ,TH-NOT-HERE-OBJECT /?CND8
|
|
RETURN 2
|
|
?CND8: PRINTC 91
|
|
ICALL1 RT-CYOU-MSG
|
|
PRINTI "cannot "
|
|
EQUAL? GL-PRSA,V?LISTEN \?CCL40
|
|
PRINTI "hear"
|
|
JUMP ?CND38
|
|
?CCL40: EQUAL? GL-PRSA,V?SMELL \?CCL42
|
|
PRINTI "smell"
|
|
JUMP ?CND38
|
|
?CCL42: PRINTI "see"
|
|
?CND38: INTBL? GL-P-XNAM,K-CAPS+2,18 /?CND43
|
|
PRINTI " any"
|
|
?CND43: ICALL2 RT-NOT-HERE-PRINT,PRSO?
|
|
PRINTI " here.]"
|
|
CRLF
|
|
ICALL1 RT-P-CLEAR
|
|
RETURN 2
|
|
|
|
|
|
.FUNCT RT-FAKE-ORPHAN-MSG,TMP,?TMP1
|
|
ICALL RT-ORPHAN,GL-P-SYNTAX,FALSE-VALUE
|
|
PRINT K-BE-SPECIFIC-MSG
|
|
GET GL-P-OTBL,K-P-VERBN >TMP
|
|
ZERO? TMP \?CCL3
|
|
PRINTI "tell"
|
|
JUMP ?CND1
|
|
?CCL3: GETB GL-P-VTBL,2
|
|
ZERO? STACK \?CCL5
|
|
GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND1
|
|
?CCL5: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
ICALL RT-WORD-PRINT,?TMP1,STACK
|
|
PUTB GL-P-VTBL,2,0
|
|
?CND1: PRINTI "?]"
|
|
CRLF
|
|
SET 'GL-P-ORPH,TRUE-VALUE
|
|
SET 'GL-P-GOOD,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-TIME-OF-DAY-MSG,WAIT?,TOD
|
|
CALL1 RT-TIME-OF-DAY >TOD
|
|
FSET? GL-PLACE-CUR,FL-INDOORS /FALSE
|
|
EQUAL? GL-LAST-OUT-TOD,TOD /FALSE
|
|
ZERO? WAIT? /?CCL9
|
|
ICALL2 RT-WAIT-TOD-MSG,TOD
|
|
JUMP ?CND7
|
|
?CCL9: CRLF
|
|
ICALL RT-CYOU-MSG,STR?223,STR?224
|
|
PRINTI "that "
|
|
EQUAL? TOD,1 \?CCL12
|
|
PRINTI "the sky is lighter. Soon it will be sunrise."
|
|
CRLF
|
|
JUMP ?CND7
|
|
?CCL12: EQUAL? TOD,2 \?CCL14
|
|
PRINTI "the sun has risen... as much as it ever does in England."
|
|
CRLF
|
|
JUMP ?CND7
|
|
?CCL14: EQUAL? TOD,3 \?CCL16
|
|
PRINTI "the setting sun marks the end of another day. Soon it will be dark."
|
|
CRLF
|
|
JUMP ?CND7
|
|
?CCL16: PRINTI "the sun has set and the mists have rolled in."
|
|
CRLF
|
|
?CND7: SET 'GL-LAST-OUT-TOD,TOD
|
|
RETURN GL-LAST-OUT-TOD
|
|
|
|
|
|
.FUNCT RT-TIME-OF-DAY,TOD
|
|
CALL RT-CLOCK-CMP,6,30,0
|
|
EQUAL? STACK,1 \?CCL3
|
|
SET 'TOD,0
|
|
RETURN TOD
|
|
?CCL3: CALL RT-CLOCK-CMP,7,0,0
|
|
EQUAL? STACK,1 \?CCL5
|
|
SET 'TOD,1
|
|
RETURN TOD
|
|
?CCL5: CALL RT-CLOCK-CMP,19,30,0
|
|
EQUAL? STACK,1 \?CCL7
|
|
SET 'TOD,2
|
|
RETURN TOD
|
|
?CCL7: CALL RT-CLOCK-CMP,20,0,0
|
|
EQUAL? STACK,1 \?CCL9
|
|
SET 'TOD,3
|
|
RETURN TOD
|
|
?CCL9: SET 'TOD,0
|
|
RETURN TOD
|
|
|
|
|
|
.FUNCT RT-SPOKEN-TO-MSG,WHO
|
|
EQUAL? WHO,GL-P-QCONTEXT-TH \?CCL2
|
|
EQUAL? GL-PLACE-CUR,GL-P-QCONTEXT-RM /TRUE
|
|
?CCL2: SET 'GL-P-QCONTEXT-TH,WHO
|
|
LOC WHO >GL-P-QCONTEXT-RM
|
|
ICALL2 RT-THIS-IS-IT,WHO
|
|
PRINTI "[spoken to "
|
|
ICALL2 RT-THEO-PRINT,WHO
|
|
PRINTR "]"
|
|
|
|
|
|
.FUNCT RT-GET-PREP,SYN,WHICH,PREP
|
|
EQUAL? WHICH,1 \?CCL3
|
|
GETB SYN,K-P-SPREP1 >PREP
|
|
JUMP ?CND1
|
|
?CCL3: GETB SYN,K-P-SPREP2 >PREP
|
|
?CND1: BAND PREP,63 >PREP
|
|
ZERO? PREP /FALSE
|
|
ADD PREP,192
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1,DRIVE2,PREP,VERB,TPREP,?TMP2,?TMP1
|
|
GET GL-P-ITBL,K-P-VERB >VERB
|
|
ZERO? VERB \?CND1
|
|
ICALL2 RT-NOT-IN-SENTENCE-MSG,STR?225
|
|
RFALSE
|
|
?CND1: SUB 255,VERB
|
|
GET VERBS,STACK >SYN
|
|
GETB SYN,0 >LEN
|
|
INC 'SYN
|
|
?PRG3: GETB SYN,0
|
|
SHIFT STACK,-6 >NUM
|
|
GRTR? GL-P-NCN,NUM /?CND5
|
|
LESS? NUM,1 /?CCL9
|
|
ZERO? GL-P-NCN \?CCL9
|
|
GET GL-P-ITBL,K-P-PREP1 >PREP
|
|
ZERO? PREP /?CTR8
|
|
CALL RT-GET-PREP,SYN,1
|
|
EQUAL? PREP,STACK \?CCL9
|
|
?CTR8: SET 'DRIVE1,SYN
|
|
JUMP ?CND5
|
|
?CCL9: CALL RT-GET-PREP,SYN,1 >?TMP1
|
|
GET GL-P-ITBL,K-P-PREP1
|
|
EQUAL? ?TMP1,STACK \?CND5
|
|
EQUAL? NUM,2 \?CCL18
|
|
EQUAL? GL-P-NCN,1 \?CCL18
|
|
SET 'DRIVE2,SYN
|
|
JUMP ?CND5
|
|
?CCL18: GRTR? NUM,1 /?CCL22
|
|
GET GL-P-ITBL,K-P-PREP2
|
|
ZERO? STACK \?CND5
|
|
?CCL22: GRTR? NUM,1 \?CCL25
|
|
CALL RT-GET-PREP,SYN,2 >?TMP1
|
|
GET GL-P-ITBL,K-P-PREP2
|
|
EQUAL? ?TMP1,STACK \?CND5
|
|
?CCL25: ICALL2 RT-SYNTAX-FOUND,SYN
|
|
RTRUE
|
|
?CND5: DLESS? 'LEN,1 \?CCL30
|
|
ZERO? DRIVE1 \?REP4
|
|
ZERO? DRIVE2 \?REP4
|
|
EQUAL? GL-P-NCN,2 \?CCL37
|
|
ZERO? GL-FUNNY-CLAUSE? /?CCL37
|
|
SET 'GL-P-NCN,1
|
|
SET 'GL-FUNNY-CLAUSE?,FALSE-VALUE
|
|
GET GL-P-ITBL,K-P-NC2L
|
|
PUT GL-P-ITBL,K-P-NC1L,STACK
|
|
CALL1 RT-SYNTAX-CHECK
|
|
RSTACK
|
|
?CCL37: PRINT K-DONT-UNDERSTAND-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CCL30: ZERO? NUM \?CCL42
|
|
ADD SYN,K-P-SLEN-0 >SYN
|
|
JUMP ?PRG3
|
|
?CCL42: EQUAL? NUM,1 \?CCL44
|
|
ADD SYN,K-P-SLEN-1 >SYN
|
|
JUMP ?PRG3
|
|
?CCL44: ADD SYN,K-P-SLEN-2 >SYN
|
|
JUMP ?PRG3
|
|
?REP4: ZERO? DRIVE1 /?CCL47
|
|
GETB DRIVE1,K-P-SFWIM1 >?TMP2
|
|
GETB DRIVE1,K-P-SLOC1 >?TMP1
|
|
CALL RT-GET-PREP,DRIVE1,1
|
|
CALL RT-GET-WHAT-I-MEAN,?TMP2,?TMP1,STACK >OBJ
|
|
ZERO? OBJ /?CCL47
|
|
PUT GL-P-PRSO,K-P-MATCHLEN,1
|
|
PUT GL-P-PRSO,1,OBJ
|
|
ICALL2 RT-SYNTAX-FOUND,DRIVE1
|
|
RTRUE
|
|
?CCL47: ZERO? DRIVE2 /?CCL51
|
|
GETB DRIVE2,K-P-SFWIM2 >?TMP2
|
|
GETB DRIVE2,K-P-SLOC2 >?TMP1
|
|
CALL RT-GET-PREP,DRIVE2,2
|
|
CALL RT-GET-WHAT-I-MEAN,?TMP2,?TMP1,STACK >OBJ
|
|
ZERO? OBJ /?CCL51
|
|
PUT GL-P-PRSI,K-P-MATCHLEN,1
|
|
PUT GL-P-PRSI,1,OBJ
|
|
ICALL2 RT-SYNTAX-FOUND,DRIVE2
|
|
RTRUE
|
|
?CCL51: EQUAL? VERB,ACT?FIND \?CCL55
|
|
PRINT K-DO-IT-YOURSELF-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CCL55: EQUAL? GL-WINNER,CH-PLAYER \?CCL58
|
|
ICALL RT-ORPHAN,DRIVE1,DRIVE2
|
|
PRINTI "[Wh"
|
|
JUMP ?CND56
|
|
?CCL58: PRINTI "[Your command was not complete. Type wh"
|
|
?CND56: EQUAL? VERB,ACT?WALK,ACT?GO \?CCL61
|
|
PRINTI "ere"
|
|
JUMP ?CND59
|
|
?CCL61: ZERO? DRIVE1 /?PRD65
|
|
GETB DRIVE1,K-P-SFWIM1
|
|
EQUAL? STACK,FL-PERSON /?CTR62
|
|
?PRD65: ZERO? DRIVE2 /?CCL63
|
|
GETB DRIVE2,K-P-SFWIM2
|
|
EQUAL? STACK,FL-PERSON \?CCL63
|
|
?CTR62: PRINTI "om"
|
|
JUMP ?CND59
|
|
?CCL63: PRINTI "at"
|
|
?CND59: EQUAL? GL-WINNER,CH-PLAYER \?CCL72
|
|
PRINTI " do you want to "
|
|
JUMP ?CND70
|
|
?CCL72: PRINTI " you want "
|
|
ICALL2 RT-THEO-PRINT,GL-WINNER
|
|
PRINTI " to "
|
|
?CND70: ICALL1 RT-VERB-PRINT
|
|
ZERO? DRIVE2 /?CND73
|
|
ICALL RT-CLAUSE-PRINT,K-P-NC1,K-P-NC1L
|
|
?CND73: SET 'GL-P-END-ON-PREP,FALSE-VALUE
|
|
ZERO? DRIVE1 /?CCL77
|
|
CALL RT-GET-PREP,DRIVE1,1
|
|
JUMP ?CND75
|
|
?CCL77: CALL RT-GET-PREP,DRIVE2,2
|
|
?CND75: ICALL2 RT-PREP-PRINT,STACK
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CCL80
|
|
SET 'GL-P-ORPH,TRUE-VALUE
|
|
PRINTI "?]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL80: SET 'GL-P-ORPH,FALSE-VALUE
|
|
PRINTI ".]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-CLAUSE,PTR,VAL,WRD,OFF,NUM,ANDFLG,FIRST??,NW,LW,TPTR,TMP,?TMP1
|
|
SET 'FIRST??,TRUE-VALUE
|
|
SUB GL-P-NCN,1
|
|
MUL STACK,2 >OFF
|
|
ZERO? VAL /?CCL3
|
|
ADD K-P-PREP1,OFF >NUM
|
|
PUT GL-P-ITBL,NUM,VAL
|
|
ADD NUM,1
|
|
PUT GL-P-ITBL,STACK,WRD
|
|
ADD PTR,K-P-LEXELEN >PTR
|
|
JUMP ?CND1
|
|
?CCL3: INC 'GL-P-LEN
|
|
?CND1: ZERO? GL-P-LEN \?CND4
|
|
DEC 'GL-P-NCN
|
|
RETURN -1
|
|
?CND4: ADD K-P-NC1,OFF >NUM
|
|
MUL PTR,2
|
|
ADD GL-P-P-LEX,STACK
|
|
PUT GL-P-ITBL,NUM,STACK
|
|
GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?THE,W?A,W?AN \?PRG8
|
|
GET GL-P-ITBL,NUM
|
|
ADD STACK,4
|
|
PUT GL-P-ITBL,NUM,STACK
|
|
?PRG8: DLESS? 'GL-P-LEN,0 \?CND10
|
|
ADD NUM,1 >?TMP1
|
|
MUL PTR,2
|
|
ADD GL-P-P-LEX,STACK
|
|
PUT GL-P-ITBL,?TMP1,STACK
|
|
RETURN -1
|
|
?CND10: GET GL-P-P-LEX,PTR >WRD
|
|
ZERO? WRD \?CTR13
|
|
CALL2 RT-NUMBER?,PTR >WRD
|
|
ZERO? WRD /?CCL14
|
|
?CTR13: ZERO? GL-P-LEN \?CCL19
|
|
SET 'NW,0
|
|
JUMP ?CND17
|
|
?CCL19: ADD PTR,K-P-LEXELEN >TPTR
|
|
GET GL-P-P-LEX,TPTR >NW
|
|
ZERO? NW \?CND17
|
|
EQUAL? WRD,W?INTNUM /?CND17
|
|
CALL2 RT-NUMBER?,TPTR >NW
|
|
PUT GL-P-P-LEX,TPTR,NW
|
|
?CND17: EQUAL? WRD,W?PERIOD \?CCL26
|
|
EQUAL? LW,W?MR,W?MRS,W?MISS /?CTR25
|
|
EQUAL? LW,W?DR \?CCL26
|
|
?CTR25: SET 'LW,0
|
|
JUMP ?CND12
|
|
?CCL26: EQUAL? WRD,W?AND,W?COMMA \?CCL32
|
|
SET 'ANDFLG,TRUE-VALUE
|
|
JUMP ?CND12
|
|
?CCL32: EQUAL? WRD,W?ALL,W?BOTH,W?EVERYTHING \?CCL34
|
|
EQUAL? NW,W?OF \?CND12
|
|
DEC 'GL-P-LEN
|
|
ADD PTR,K-P-LEXELEN >PTR
|
|
JUMP ?CND12
|
|
?CCL34: EQUAL? WRD,W?THEN,W?PERIOD /?CTR37
|
|
GETB WRD,6
|
|
BTST STACK,8 \?CCL38
|
|
GET GL-P-ITBL,K-P-VERB
|
|
ZERO? STACK /?CCL38
|
|
ZERO? FIRST?? \?CCL38
|
|
?CTR37: INC 'GL-P-LEN
|
|
ADD NUM,1 >?TMP1
|
|
MUL PTR,2
|
|
ADD GL-P-P-LEX,STACK
|
|
PUT GL-P-ITBL,?TMP1,STACK
|
|
SUB PTR,K-P-LEXELEN
|
|
RSTACK
|
|
?CCL38: ZERO? ANDFLG /?CCL45
|
|
GET GL-P-ITBL,K-P-VERBN
|
|
ZERO? STACK /?CTR44
|
|
CALL2 RT-VERB-DIR-ONLY?,WRD
|
|
ZERO? STACK /?CCL45
|
|
?CTR44: SUB PTR,4 >PTR
|
|
ADD PTR,2
|
|
ICALL RT-CHANGE-LEXV,STACK,W?THEN
|
|
ADD GL-P-LEN,2 >GL-P-LEN
|
|
JUMP ?CND12
|
|
?CCL45: GETB WRD,6
|
|
BTST STACK,128 \?CCL51
|
|
GRTR? GL-P-LEN,0 \?CCL54
|
|
EQUAL? NW,W?OF \?CCL54
|
|
EQUAL? WRD,W?ALL,W?EVERYTHING /?CCL54
|
|
SUB GL-P-NCN,1
|
|
PUT GL-P-OFW,STACK,WRD
|
|
JUMP ?CND12
|
|
?CCL54: GETB WRD,6
|
|
BTST STACK,32 \?CCL59
|
|
ZERO? NW /?CCL59
|
|
GETB NW,6
|
|
BTST STACK,128 \?CCL59
|
|
EQUAL? WRD,W?INTNUM \?CCL65
|
|
EQUAL? NW,W?HOUR,W?HOURS,W?MINUTE /?CND12
|
|
EQUAL? NW,W?MINUTES /?CND12
|
|
?CCL65: EQUAL? NW,W?TOMB /?CND12
|
|
EQUAL? WRD,W?BOX \?CCL74
|
|
EQUAL? NW,W?INTNUM /?CND72
|
|
SET 'TMP,TRUE-VALUE
|
|
JUMP ?CND72
|
|
?CCL74: EQUAL? WRD,W?TOMB \?CND72
|
|
SET 'TMP,TRUE-VALUE
|
|
?CND72: ZERO? TMP /?CND12
|
|
SET 'GL-FUNNY-CLAUSE?,TRUE-VALUE
|
|
INC 'NUM
|
|
SET '?TMP1,1
|
|
ADD PTR,2
|
|
MUL STACK,2
|
|
ADD GL-P-P-LEX,STACK
|
|
PUT GL-P-ITBL,?TMP1,STACK
|
|
RETURN PTR
|
|
?CCL59: ZERO? ANDFLG \?CCL81
|
|
EQUAL? NW,W?BUT,W?EXCEPT /?CCL81
|
|
EQUAL? NW,W?AND,W?COMMA /?CCL81
|
|
ADD NUM,1 >?TMP1
|
|
ADD PTR,2
|
|
MUL STACK,2
|
|
ADD GL-P-P-LEX,STACK
|
|
PUT GL-P-ITBL,?TMP1,STACK
|
|
RETURN PTR
|
|
?CCL81: SET 'ANDFLG,FALSE-VALUE
|
|
JUMP ?CND12
|
|
?CCL51: ZERO? GL-P-MERGED \?PRD87
|
|
ZERO? GL-P-ORPH \?PRD87
|
|
GET GL-P-ITBL,K-P-VERB
|
|
ZERO? STACK /?CCL85
|
|
?PRD87: GETB WRD,6
|
|
BAND STACK,36
|
|
ZERO? STACK \?CND12
|
|
?CCL85: ZERO? ANDFLG /?CCL92
|
|
GET GL-P-ITBL,K-P-VERB
|
|
ZERO? STACK \?CCL92
|
|
SUB PTR,4 >PTR
|
|
ADD PTR,2
|
|
ICALL RT-CHANGE-LEXV,STACK,W?THEN
|
|
ADD GL-P-LEN,2 >GL-P-LEN
|
|
?CND12: SET 'LW,WRD
|
|
SET 'FIRST??,FALSE-VALUE
|
|
ADD PTR,K-P-LEXELEN >PTR
|
|
JUMP ?PRG8
|
|
?CCL92: GETB WRD,6
|
|
BTST STACK,8 /?CND12
|
|
ICALL2 RT-DONT-KNOW-WORD-USE-MSG,PTR
|
|
RFALSE
|
|
?CCL14: ICALL2 RT-DONT-KNOW-WORD-MSG,PTR
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-GET-WHAT-I-MEAN,GBIT,LBIT,PREP,NO-ROOMS?,SILENT?,OBJ
|
|
EQUAL? GBIT,FL-LOCATION \?CCL3
|
|
RETURN ROOMS
|
|
?CCL3: ZERO? GL-P-IT-OBJECT /?CND1
|
|
FSET? GL-P-IT-OBJECT,GBIT \?CND1
|
|
ZERO? SILENT? /?CCL8
|
|
RETURN GL-P-IT-OBJECT
|
|
?CCL8: PRINTC 91
|
|
ICALL2 RT-THEO-PRINT,GL-P-IT-OBJECT
|
|
PRINTC 93
|
|
CRLF
|
|
RETURN GL-P-IT-OBJECT
|
|
?CND1: SET 'INHIBIT-ROOMS,NO-ROOMS?
|
|
SET 'GL-P-GWIMBIT,GBIT
|
|
SET 'GL-P-SLOCBITS,LBIT
|
|
PUT GL-P-MERGE,K-P-MATCHLEN,0
|
|
CALL RT-GET-OBJECT,GL-P-MERGE,FALSE-VALUE
|
|
ZERO? STACK /?CCL11
|
|
SET 'GL-P-GWIMBIT,0
|
|
GET GL-P-MERGE,K-P-MATCHLEN
|
|
EQUAL? STACK,1 \FALSE
|
|
GET GL-P-MERGE,1 >OBJ
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CND15
|
|
EQUAL? OBJ,TH-HANDS /?CND15
|
|
ZERO? SILENT? \?CND15
|
|
PRINTC 91
|
|
CALL RT-PREP-PRINT,PREP,FALSE-VALUE
|
|
ZERO? STACK /?CND20
|
|
PRINTC 32
|
|
?CND20: ICALL2 RT-THEO-PRINT,OBJ
|
|
PRINTC 93
|
|
CRLF
|
|
?CND15: SET 'INHIBIT-ROOMS,FALSE-VALUE
|
|
RETURN OBJ
|
|
?CCL11: SET 'GL-P-GWIMBIT,0
|
|
SET 'INHIBIT-ROOMS,FALSE-VALUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-P-CLEAR
|
|
SET 'GL-P-CONT,FALSE-VALUE
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-PICK-NEXT,TBL,CNT,STR,NT
|
|
GETB TBL,0 >CNT
|
|
ADD TBL,1
|
|
GET STACK,0 >NT
|
|
GET NT,CNT >STR
|
|
GET NT,0
|
|
IGRTR? 'CNT,STACK \?CND1
|
|
SET 'CNT,1
|
|
?CND1: PUTB TBL,0,CNT
|
|
RETURN STR
|
|
|
|
|
|
.FUNCT RT-QCONTEXT-GOOD?
|
|
ZERO? GL-WHERE-TO-ORPH? \FALSE
|
|
ZERO? GL-P-QCONTEXT-TH /FALSE
|
|
FSET? GL-P-QCONTEXT-TH,FL-PERSON \FALSE
|
|
EQUAL? GL-PLACE-CUR,GL-P-QCONTEXT-RM \FALSE
|
|
CALL2 RT-VISIBLE?,GL-P-QCONTEXT-TH
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-FIND-PERSON,THING,OBJ,OBJ1,WHO-P,WHO-A
|
|
FIRST? THING >OBJ /?PRG2
|
|
?PRG2: ZERO? OBJ /?REP3
|
|
FSET? OBJ,FL-PERSON \?CCL8
|
|
FSET? OBJ,FL-PLURAL /?CND4
|
|
EQUAL? OBJ,CH-PLAYER,GL-WINNER /?CND4
|
|
FSET? OBJ,FL-ASLEEP /?CND4
|
|
EQUAL? OBJ,GL-PUPPY \?REP3
|
|
SET 'WHO-P,OBJ
|
|
JUMP ?CND4
|
|
?CCL8: FSET? OBJ,FL-SURFACE /?CCL17
|
|
FSET? OBJ,FL-CONTAINER \?CND4
|
|
FSET? OBJ,FL-OPENED \?CND4
|
|
?CCL17: SET 'OBJ1,OBJ
|
|
CALL2 RT-FIND-PERSON,OBJ >OBJ
|
|
ZERO? OBJ /?CND22
|
|
FSET? OBJ,FL-ASLEEP /?CND22
|
|
EQUAL? OBJ,GL-PUPPY \?REP3
|
|
SET 'WHO-P,OBJ
|
|
?CND22: SET 'OBJ,OBJ1
|
|
?CND4: NEXT? OBJ >OBJ /?PRG2
|
|
JUMP ?PRG2
|
|
?REP3: ZERO? OBJ /?CCL31
|
|
RETURN OBJ
|
|
?CCL31: ZERO? WHO-P /FALSE
|
|
RETURN WHO-P
|
|
|
|
|
|
.FUNCT RT-ANYONE-HERE?
|
|
CALL1 RT-QCONTEXT-GOOD?
|
|
ZERO? STACK /?CCL3
|
|
RETURN GL-P-QCONTEXT-TH
|
|
?CCL3: CALL2 RT-FIND-PERSON,GL-PLACE-CUR
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-MOVE-ALL,FROM,TO,OBJ,NXT
|
|
FIRST? FROM >OBJ /?PRG2
|
|
?PRG2: ZERO? OBJ /TRUE
|
|
NEXT? OBJ >NXT /?BOGUS6
|
|
?BOGUS6: MOVE OBJ,TO
|
|
SET 'OBJ,NXT
|
|
JUMP ?PRG2
|
|
|
|
|
|
.FUNCT RT-GOT?,OBJ
|
|
ZERO? OBJ /FALSE
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CCL5
|
|
IN? OBJ,TH-POCKET /TRUE
|
|
?CCL5: CALL2 RT-HELD?,OBJ
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-HELD?,OBJ,L
|
|
ZERO? OBJ /FALSE
|
|
FSET? OBJ,FL-TAKEABLE /?CND1
|
|
FSET? OBJ,FL-TRYTAKE \FALSE
|
|
?CND1: LOC OBJ >L
|
|
EQUAL? L,FALSE-VALUE,ROOMS,GLOBAL-OBJECTS /FALSE
|
|
EQUAL? L,GL-WINNER /TRUE
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CCL13
|
|
EQUAL? L,TH-POCKET /FALSE
|
|
?CCL13: CALL2 RT-HELD?,L
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-THIS-IS-IT,OBJ
|
|
EQUAL? OBJ,FALSE-VALUE,CH-PLAYER,TH-NOT-HERE-OBJECT /TRUE
|
|
EQUAL? OBJ,TH-INTDIR,TH-INTNUM /TRUE
|
|
EQUAL? OBJ,TH-LEFT,TH-RIGHT /TRUE
|
|
EQUAL? GL-PRSA,V?WALK,V?WALK-TO \?CCL8
|
|
EQUAL? OBJ,GL-PRSO /TRUE
|
|
?CCL8: FSET? OBJ,FL-PERSON \?CCL12
|
|
FSET? OBJ,FL-FEMALE \?CCL12
|
|
SET 'GL-P-HER-OBJECT,OBJ
|
|
RTRUE
|
|
?CCL12: FSET? OBJ,FL-PERSON \?CCL16
|
|
FSET? OBJ,FL-FEMALE /?CCL16
|
|
SET 'GL-P-HIM-OBJECT,OBJ
|
|
RTRUE
|
|
?CCL16: FSET? OBJ,FL-COLLECTIVE \?CCL20
|
|
SET 'GL-P-THEM-OBJECT,OBJ
|
|
SET 'GL-P-IT-OBJECT,OBJ
|
|
RTRUE
|
|
?CCL20: FSET? OBJ,FL-PLURAL \?CCL22
|
|
SET 'GL-P-THEM-OBJECT,OBJ
|
|
RTRUE
|
|
?CCL22: FSET? OBJ,FL-NEEDS-IDENTITY \?CCL25
|
|
GETP OBJ,P?OBJ-NOUN
|
|
PUTP TH-IT,P?OBJ-NOUN,STACK
|
|
GETP OBJ,P?OBJ-ADJ
|
|
PUTP TH-IT,P?OBJ-ADJ,STACK
|
|
JUMP ?CND23
|
|
?CCL25: PUTP TH-IT,P?OBJ-NOUN,0
|
|
PUTP TH-IT,P?OBJ-ADJ,0
|
|
?CND23: SET 'GL-P-IT-OBJECT,OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-CHANGE-LEXV,PTR,WRD,PTRS?,X,Y,Z
|
|
ZERO? PTRS? /?CND1
|
|
SUB PTR,K-P-LEXELEN
|
|
MUL 2,STACK
|
|
ADD 2,STACK >X
|
|
GETB GL-P-P-LEX,X >Y
|
|
MUL 2,PTR
|
|
ADD 2,STACK >Z
|
|
PUTB GL-P-P-LEX,Z,Y
|
|
PUTB GL-P-S-LEX,Z,Y
|
|
ADD 1,X
|
|
GETB GL-P-P-LEX,STACK >Y
|
|
MUL 2,PTR
|
|
ADD 3,STACK >Z
|
|
PUTB GL-P-P-LEX,Z,Y
|
|
PUTB GL-P-S-LEX,Z,Y
|
|
?CND1: PUT GL-P-P-LEX,PTR,WRD
|
|
PUT GL-P-S-LEX,PTR,WRD
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-WT?,PTR,BIT,B1,OFFS,TYP,TBL,?TMP1
|
|
ASSIGNED? 'B1 /?CND1
|
|
SET 'B1,5
|
|
?CND1: SET 'OFFS,K-P-P1OFF
|
|
GETB PTR,K-P-PSOFF >TYP
|
|
BTST TYP,BIT \FALSE
|
|
GRTR? B1,4 /TRUE
|
|
EQUAL? BIT,8 \?CCL10
|
|
ADD PREPOSITIONS,2 >?TMP1
|
|
GET PREPOSITIONS,0
|
|
INTBL? PTR,?TMP1,STACK,131 >TBL \FALSE
|
|
GETB TBL,2
|
|
RSTACK
|
|
?CCL10: BAND TYP,K-P-P1BITS >TYP
|
|
GETB PTR,OFFS
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-VERB-DIR-ONLY?,WRD
|
|
GETB WRD,6
|
|
BAND STACK,160
|
|
ZERO? STACK \FALSE
|
|
GETB WRD,6
|
|
BAND STACK,80
|
|
ZERO? STACK /FALSE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-STUFF,DEST,SRC,MAX
|
|
ASSIGNED? 'MAX /?CND1
|
|
SET 'MAX,29
|
|
?CND1: MUL MAX,K-P-WORDLEN
|
|
ADD K-P-LEXSTART,STACK
|
|
COPYT SRC,DEST,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-INBUF-ADD,LEN,BEG,SLOT,DBEG,CTR,TMP,?TMP1
|
|
GET GL-OOPS-TABLE,K-O-END >TMP
|
|
ZERO? TMP /?CCL3
|
|
SET 'DBEG,TMP
|
|
JUMP ?CND1
|
|
?CCL3: GET GL-OOPS-TABLE,K-O-LENGTH >TMP
|
|
GETB GL-P-S-LEX,TMP >?TMP1
|
|
ADD TMP,1
|
|
GETB GL-P-S-LEX,STACK
|
|
ADD ?TMP1,STACK >DBEG
|
|
?CND1: ADD DBEG,LEN
|
|
PUT GL-OOPS-TABLE,K-O-END,STACK
|
|
ADD GL-P-PIBUF,BEG >?TMP1
|
|
ADD GL-OOPS-INBUF,DBEG
|
|
COPYT ?TMP1,STACK,LEN
|
|
PUTB GL-P-S-LEX,SLOT,DBEG
|
|
SUB SLOT,1
|
|
PUTB GL-P-S-LEX,STACK,LEN
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-ACLAUSE-WIN,ADJ,X
|
|
GET GL-P-OTBL,K-P-VERB
|
|
PUT GL-P-ITBL,K-P-VERB,STACK
|
|
ADD GL-P-ACLAUSE,1 >X
|
|
ICALL RT-CLAUSE-COPY,GL-P-OTBL,GL-P-OTBL,GL-P-ACLAUSE,X,GL-P-ACLAUSE,X,ADJ
|
|
GET GL-P-OTBL,K-P-NC2
|
|
ZERO? STACK /?PEN1
|
|
SET 'GL-P-NCN,2
|
|
?PEN1: SET 'GL-P-ACLAUSE,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-NCLAUSE-WIN
|
|
ADD GL-P-ACLAUSE,1
|
|
ICALL RT-CLAUSE-COPY,GL-P-ITBL,GL-P-OTBL,K-P-NC1,K-P-NC1L,GL-P-ACLAUSE,STACK
|
|
GET GL-P-OTBL,K-P-NC2
|
|
ZERO? STACK /?PEN1
|
|
SET 'GL-P-NCN,2
|
|
?PEN1: SET 'GL-P-ACLAUSE,FALSE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-ORPHAN-VERB,VERB,PREVERB
|
|
PUT GL-P-VTBL,0,VERB
|
|
PUT GL-P-OTBL,K-P-VERB,PREVERB
|
|
PUT GL-P-OTBL,K-P-VERBN,GL-P-VTBL
|
|
PUT GL-P-OTBL,K-P-PREP1,0
|
|
PUT GL-P-OTBL,K-P-PREP1N,0
|
|
PUT GL-P-OTBL,K-P-PREP2,0
|
|
PUT GL-P-OTBL,5,0
|
|
PUT GL-P-OTBL,K-P-NC1,1
|
|
PUT GL-P-OTBL,K-P-NC1L,0
|
|
PUT GL-P-OTBL,K-P-NC2,0
|
|
PUT GL-P-OTBL,K-P-NC2L,0
|
|
SET 'GL-P-ORPH,TRUE-VALUE
|
|
RETURN GL-P-ORPH
|
|
|
|
|
|
.FUNCT RT-ORPHAN,D1,D2,CNT
|
|
SET 'CNT,-1
|
|
ZERO? GL-P-MERGED \?CND1
|
|
PUT GL-P-OCLAUSE,K-P-MATCHLEN,0
|
|
?CND1: GET GL-P-VTBL,0
|
|
PUT GL-P-OVTBL,0,STACK
|
|
GETB GL-P-VTBL,2
|
|
PUTB GL-P-OVTBL,2,STACK
|
|
GETB GL-P-VTBL,3
|
|
PUTB GL-P-OVTBL,3,STACK
|
|
COPYT GL-P-ITBL,GL-P-OTBL,20
|
|
EQUAL? GL-P-NCN,2 \?CND3
|
|
ICALL RT-CLAUSE-COPY,GL-P-ITBL,GL-P-OTBL,K-P-NC2,K-P-NC2L,K-P-NC2,K-P-NC2L
|
|
?CND3: LESS? GL-P-NCN,1 /?CND5
|
|
ICALL RT-CLAUSE-COPY,GL-P-ITBL,GL-P-OTBL,K-P-NC1,K-P-NC1L,K-P-NC1,K-P-NC1L
|
|
?CND5: ZERO? D1 /?CCL9
|
|
CALL RT-GET-PREP,D1,1
|
|
PUT GL-P-OTBL,K-P-PREP1,STACK
|
|
PUT GL-P-OTBL,K-P-NC1,1
|
|
RTRUE
|
|
?CCL9: ZERO? D2 /FALSE
|
|
CALL RT-GET-PREP,D2,2
|
|
PUT GL-P-OTBL,K-P-PREP2,STACK
|
|
PUT GL-P-OTBL,K-P-NC2,1
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-ORPHAN-MERGE,CNT,TEMP,VERB,BEG,END,ADJ,WRD,?TMP1
|
|
SET 'CNT,-1
|
|
SET 'GL-P-ORPH,FALSE-VALUE
|
|
GET GL-P-ITBL,K-P-VERBN >WRD
|
|
ZERO? WRD /?CND1
|
|
GET WRD,0 >WRD
|
|
ZERO? WRD /?CND1
|
|
GET GL-P-ITBL,K-P-VERBN
|
|
GET STACK,0 >WRD
|
|
CALL RT-WT?,WRD,64,1 >?TMP1
|
|
GET GL-P-OTBL,K-P-VERB
|
|
EQUAL? ?TMP1,STACK /?CTR6
|
|
GETB WRD,6
|
|
BTST STACK,32 \?CCL7
|
|
?CTR6: SET 'ADJ,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL7: GET GL-P-ITBL,K-P-VERBN
|
|
GET STACK,0 >WRD
|
|
GETB WRD,6
|
|
BTST STACK,32 \?CCL11
|
|
SET 'ADJ,TRUE-VALUE
|
|
JUMP ?CND1
|
|
?CCL11: GETB WRD,6
|
|
BTST STACK,128 \?CND1
|
|
ZERO? GL-P-NCN \?CND1
|
|
GET GL-P-ITBL,K-P-VERB >VERB
|
|
ZERO? VERB /?CND1
|
|
PUT GL-P-ITBL,K-P-VERB,0
|
|
PUT GL-P-ITBL,K-P-VERBN,0
|
|
PUT GL-P-ITBL,K-P-NC1,T?GL-P-P-LEX+2
|
|
PUT GL-P-ITBL,K-P-NC1L,T?GL-P-P-LEX+6
|
|
SET 'GL-P-NCN,1
|
|
?CND1: GET GL-P-ITBL,K-P-VERB >VERB
|
|
ZERO? VERB /?CCL18
|
|
ZERO? ADJ \?CCL18
|
|
GET GL-P-OTBL,K-P-VERB
|
|
EQUAL? VERB,STACK \FALSE
|
|
?CCL18: EQUAL? GL-P-NCN,2 \?CCL23
|
|
ZERO? GL-FUNNY-CLAUSE? /FALSE
|
|
SET 'GL-P-NCN,1
|
|
SET 'GL-FUNNY-CLAUSE?,FALSE-VALUE
|
|
GET GL-P-ITBL,K-P-NC2L
|
|
PUT GL-P-ITBL,K-P-NC1L,STACK
|
|
CALL1 RT-ORPHAN-MERGE
|
|
RSTACK
|
|
?CCL23: GET GL-P-OTBL,K-P-NC1
|
|
EQUAL? STACK,1 \?CCL27
|
|
GET GL-P-ITBL,K-P-PREP1 >TEMP
|
|
GET GL-P-OTBL,K-P-PREP1
|
|
EQUAL? TEMP,STACK /?CTR29
|
|
ZERO? TEMP \FALSE
|
|
?CTR29: ZERO? ADJ /?CCL35
|
|
PUT GL-P-OTBL,K-P-NC1,T?GL-P-P-LEX+2
|
|
GET GL-P-ITBL,K-P-NC1L
|
|
ZERO? STACK \?CND36
|
|
PUT GL-P-ITBL,K-P-NC1L,T?GL-P-P-LEX+6
|
|
?CND36: ZERO? GL-P-NCN \?CND33
|
|
SET 'GL-P-NCN,1
|
|
JUMP ?CND33
|
|
?CCL35: GET GL-P-ITBL,K-P-NC1
|
|
PUT GL-P-OTBL,K-P-NC1,STACK
|
|
?CND33: GET GL-P-ITBL,K-P-NC1L
|
|
PUT GL-P-OTBL,K-P-NC1L,STACK
|
|
JUMP ?CND16
|
|
?CCL27: GET GL-P-OTBL,K-P-NC2
|
|
EQUAL? STACK,1 \?CCL41
|
|
GET GL-P-ITBL,K-P-PREP1 >TEMP
|
|
GET GL-P-OTBL,K-P-PREP2
|
|
EQUAL? TEMP,STACK /?CTR43
|
|
ZERO? TEMP \FALSE
|
|
?CTR43: ZERO? ADJ /?CND47
|
|
PUT GL-P-ITBL,K-P-NC1,T?GL-P-P-LEX+2
|
|
GET GL-P-ITBL,K-P-NC1L
|
|
ZERO? STACK \?CND47
|
|
PUT GL-P-ITBL,K-P-NC1L,T?GL-P-P-LEX+6
|
|
?CND47: GET GL-P-ITBL,K-P-NC1
|
|
PUT GL-P-OTBL,K-P-NC2,STACK
|
|
GET GL-P-ITBL,K-P-NC1L
|
|
PUT GL-P-OTBL,K-P-NC2L,STACK
|
|
SET 'GL-P-NCN,2
|
|
JUMP ?CND16
|
|
?CCL41: ZERO? GL-P-ACLAUSE /?CND16
|
|
EQUAL? GL-P-NCN,1 /?CCL54
|
|
ZERO? ADJ \?CCL54
|
|
SET 'GL-P-ACLAUSE,FALSE-VALUE
|
|
RFALSE
|
|
?CCL54: GET GL-P-ITBL,K-P-NC1 >BEG
|
|
ZERO? ADJ /?CND57
|
|
SET 'BEG,T?GL-P-P-LEX+2
|
|
SET 'ADJ,FALSE-VALUE
|
|
?CND57: GET GL-P-ITBL,K-P-NC1L >END
|
|
?PRG59: GET BEG,0 >WRD
|
|
EQUAL? BEG,END \?CCL63
|
|
ZERO? ADJ /?CCL66
|
|
ICALL2 RT-ACLAUSE-WIN,ADJ
|
|
JUMP ?CND16
|
|
?CCL66: SET 'GL-P-ACLAUSE,FALSE-VALUE
|
|
RFALSE
|
|
?CCL63: GETB WRD,K-P-PSOFF
|
|
BTST STACK,32 \?PRD71
|
|
CALL RT-ADJ-CHECK,WRD,ADJ
|
|
ZERO? STACK \?CTR67
|
|
?PRD71: EQUAL? WRD,W?ALL,W?EVERYTHING \?CCL68
|
|
?CTR67: SET 'ADJ,WRD
|
|
?CND61: ADD BEG,K-P-WORDLEN >BEG
|
|
ZERO? END \?PRG59
|
|
SET 'END,BEG
|
|
SET 'GL-P-NCN,1
|
|
SUB BEG,4
|
|
PUT GL-P-ITBL,K-P-NC1,STACK
|
|
PUT GL-P-ITBL,K-P-NC1L,BEG
|
|
JUMP ?PRG59
|
|
?CCL68: GETB WRD,K-P-PSOFF
|
|
BTST STACK,128 \?CND61
|
|
EQUAL? WRD,GL-P-ANAM \?CCL77
|
|
ICALL2 RT-ACLAUSE-WIN,ADJ
|
|
JUMP ?CND16
|
|
?CCL77: ICALL1 RT-NCLAUSE-WIN
|
|
?CND16: GET GL-P-OVTBL,0
|
|
PUT GL-P-VTBL,0,STACK
|
|
GETB GL-P-OVTBL,2
|
|
PUTB GL-P-VTBL,2,STACK
|
|
GETB GL-P-OVTBL,3
|
|
PUTB GL-P-VTBL,3,STACK
|
|
PUT GL-P-OTBL,K-P-VERBN,GL-P-VTBL
|
|
PUTB GL-P-VTBL,2,0
|
|
COPYT GL-P-OTBL,GL-P-ITBL,20
|
|
SET 'GL-P-MERGED,TRUE-VALUE
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-ADJ-CHECK,WRD,ADJ
|
|
EQUAL? WRD,W?BROWN,W?BLUE /TRUE
|
|
ZERO? ADJ /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-CLAUSE-COPY,SRC,DEST,SRCBEG,SRCEND,DESTBEG,DESTEND,INSRT,BEG,END
|
|
GET SRC,SRCBEG >BEG
|
|
GET SRC,SRCEND >END
|
|
GET GL-P-OCLAUSE,K-P-MATCHLEN
|
|
MUL STACK,K-P-LEXELEN
|
|
ADD STACK,2
|
|
ADD GL-P-OCLAUSE,STACK
|
|
PUT DEST,DESTBEG,STACK
|
|
?PRG1: EQUAL? BEG,END \?CCL5
|
|
GET GL-P-OCLAUSE,K-P-MATCHLEN
|
|
MUL STACK,K-P-LEXELEN
|
|
ADD 2,STACK
|
|
ADD GL-P-OCLAUSE,STACK
|
|
PUT DEST,DESTEND,STACK
|
|
RTRUE
|
|
?CCL5: ZERO? INSRT /?CND6
|
|
GET BEG,0
|
|
EQUAL? GL-P-ANAM,STACK \?CND6
|
|
ICALL2 RT-CLAUSE-ADD,INSRT
|
|
?CND6: GET BEG,0
|
|
ICALL2 RT-CLAUSE-ADD,STACK
|
|
ADD BEG,K-P-WORDLEN >BEG
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT RT-CLAUSE-ADD,WRD,PTR
|
|
GET GL-P-OCLAUSE,K-P-MATCHLEN
|
|
ADD STACK,2 >PTR
|
|
SUB PTR,1
|
|
PUT GL-P-OCLAUSE,STACK,WRD
|
|
PUT GL-P-OCLAUSE,PTR,0
|
|
PUT GL-P-OCLAUSE,K-P-MATCHLEN,PTR
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-PREP-FIND,PREP,CNT,SIZE,TBL,?TMP1
|
|
ADD PREPOSITIONS,4 >?TMP1
|
|
GET PREPOSITIONS,0
|
|
INTBL? PREP,?TMP1,STACK,3 >TBL \FALSE
|
|
SUB TBL,2
|
|
GET STACK,0
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-SYNTAX-FOUND,SYN
|
|
SET 'GL-P-SYNTAX,SYN
|
|
GETB SYN,K-P-SACTION >GL-PRSA
|
|
RETURN GL-PRSA
|
|
|
|
|
|
.FUNCT RT-BUT-MERGE,TBL,LEN,BUTLEN,CNT,MATCHES,OBJ,NTBL
|
|
SET 'CNT,1
|
|
GET TBL,K-P-MATCHLEN >LEN
|
|
PUT GL-P-MERGE,K-P-MATCHLEN,0
|
|
?PRG1: DLESS? 'LEN,0 /?REP2
|
|
GET TBL,CNT >OBJ
|
|
GET GL-P-BUTS,0
|
|
INTBL? OBJ,T?GL-P-BUTS+2,STACK /?CND5
|
|
ADD MATCHES,1
|
|
PUT GL-P-MERGE,STACK,OBJ
|
|
INC 'MATCHES
|
|
?CND5: INC 'CNT
|
|
JUMP ?PRG1
|
|
?REP2: PUT GL-P-MERGE,K-P-MATCHLEN,MATCHES
|
|
SET 'NTBL,GL-P-MERGE
|
|
SET 'GL-P-MERGE,TBL
|
|
RETURN NTBL
|
|
|
|
|
|
.FUNCT RT-SNARF-OBJECTS,PTR,NUM
|
|
GETB GL-P-SYNTAX,0
|
|
SHIFT STACK,-6 >NUM
|
|
GRTR? NUM,0 \?CND1
|
|
GET GL-P-ITBL,K-P-NC1 >PTR
|
|
ZERO? PTR /?CND1
|
|
SET 'GL-P-PHR,0
|
|
GETB GL-P-SYNTAX,K-P-SLOC1 >GL-P-SLOCBITS
|
|
GET GL-P-ITBL,K-P-NC1L
|
|
CALL RT-SNARF,PTR,STACK,GL-P-PRSO
|
|
ZERO? STACK /FALSE
|
|
GET GL-P-BUTS,K-P-MATCHLEN
|
|
ZERO? STACK /?CND1
|
|
CALL2 RT-BUT-MERGE,GL-P-PRSO >GL-P-PRSO
|
|
?CND1: GRTR? NUM,1 \TRUE
|
|
GET GL-P-ITBL,K-P-NC2 >PTR
|
|
ZERO? PTR /TRUE
|
|
SET 'GL-P-PHR,1
|
|
GETB GL-P-SYNTAX,K-P-SLOC2 >GL-P-SLOCBITS
|
|
GET GL-P-ITBL,K-P-NC2L
|
|
CALL RT-SNARF,PTR,STACK,GL-P-PRSI
|
|
ZERO? STACK /FALSE
|
|
GET GL-P-BUTS,K-P-MATCHLEN
|
|
ZERO? STACK /TRUE
|
|
GET GL-P-PRSI,K-P-MATCHLEN
|
|
EQUAL? STACK,1 \?CCL19
|
|
CALL2 RT-BUT-MERGE,GL-P-PRSO >GL-P-PRSO
|
|
RTRUE
|
|
?CCL19: CALL2 RT-BUT-MERGE,GL-P-PRSI >GL-P-PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-SNARF,PTR,EPTR,TBL,BUT,LEN,WV,WRD,NW,WAS-ALL?,ONEOBJ
|
|
SET 'GL-P-AND,FALSE-VALUE
|
|
EQUAL? GL-P-GET-FLAGS,K-P-ALL \?CND1
|
|
SET 'WAS-ALL?,TRUE-VALUE
|
|
?CND1: SET 'GL-P-GET-FLAGS,0
|
|
PUT GL-P-BUTS,K-P-MATCHLEN,0
|
|
PUT TBL,K-P-MATCHLEN,0
|
|
GET PTR,0 >WRD
|
|
?PRG3: EQUAL? PTR,EPTR \?CCL7
|
|
ZERO? BUT /?PRD10
|
|
PUSH BUT
|
|
JUMP ?PEN8
|
|
?PRD10: PUSH TBL
|
|
?PEN8: CALL2 RT-GET-OBJECT,STACK >WV
|
|
ZERO? WAS-ALL? /?CND11
|
|
SET 'GL-P-GET-FLAGS,K-P-ALL
|
|
?CND11: RETURN WV
|
|
?CCL7: ADD PTR,K-P-WORDLEN
|
|
EQUAL? EPTR,STACK \?CCL15
|
|
SET 'NW,0
|
|
JUMP ?CND13
|
|
?CCL15: GET PTR,K-P-LEXELEN >NW
|
|
?CND13: EQUAL? WRD,W?ALL,W?BOTH,W?EVERYTHING \?CCL18
|
|
SET 'GL-P-GET-FLAGS,K-P-ALL
|
|
EQUAL? NW,W?OF \?CND5
|
|
ADD PTR,K-P-WORDLEN >PTR
|
|
JUMP ?CND5
|
|
?CCL18: EQUAL? WRD,W?BUT,W?EXCEPT \?CCL22
|
|
ZERO? BUT /?PRD27
|
|
PUSH BUT
|
|
JUMP ?PEN25
|
|
?PRD27: PUSH TBL
|
|
?PEN25: CALL2 RT-GET-OBJECT,STACK
|
|
ZERO? STACK /FALSE
|
|
SET 'BUT,GL-P-BUTS
|
|
PUT BUT,K-P-MATCHLEN,0
|
|
JUMP ?CND5
|
|
?CCL22: EQUAL? WRD,W?A \?CCL29
|
|
ZERO? GL-P-ADJ \?CCL32
|
|
SET 'GL-P-GET-FLAGS,K-P-ONE
|
|
EQUAL? NW,W?OF \?CND5
|
|
ADD PTR,K-P-WORDLEN >PTR
|
|
JUMP ?CND5
|
|
?CCL32: SET 'GL-P-NAM,ONEOBJ
|
|
ZERO? BUT /?PRD39
|
|
PUSH BUT
|
|
JUMP ?PEN37
|
|
?PRD39: PUSH TBL
|
|
?PEN37: CALL2 RT-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 'GL-P-AND,TRUE-VALUE
|
|
ZERO? BUT /?PRD50
|
|
PUSH BUT
|
|
JUMP ?PEN48
|
|
?PRD50: PUSH TBL
|
|
?PEN48: CALL2 RT-GET-OBJECT,STACK
|
|
ZERO? STACK \?CND5
|
|
RFALSE
|
|
?CCL43: GETB WRD,6
|
|
BTST STACK,4 /?CND5
|
|
EQUAL? WRD,W?AND,W?COMMA /?CND5
|
|
EQUAL? WRD,W?OF \?CCL54
|
|
ZERO? GL-P-GET-FLAGS \?CND5
|
|
SET 'GL-P-GET-FLAGS,K-P-INHIBIT
|
|
JUMP ?CND5
|
|
?CCL54: GETB WRD,6
|
|
BTST STACK,32 \?CCL58
|
|
ZERO? GL-P-ADJ \?CCL58
|
|
EQUAL? NW,W?OF /?CCL58
|
|
SET 'GL-P-ADJ,WRD
|
|
JUMP ?CND5
|
|
?CCL58: GETB WRD,6
|
|
BTST STACK,128 \?CND5
|
|
SET 'GL-P-NAM,WRD
|
|
SET 'ONEOBJ,WRD
|
|
?CND5: EQUAL? PTR,EPTR /?PRG3
|
|
ADD PTR,K-P-WORDLEN >PTR
|
|
SET 'WRD,NW
|
|
JUMP ?PRG3
|
|
|
|
|
|
.FUNCT RT-GET-OBJECT,TBL,VRB,NO-ROOMS?,BTS,LEN,XBITS,TLEN,GCHECK,OLEN,OBJ,ADJ,X
|
|
ASSIGNED? 'VRB /?CND1
|
|
SET 'VRB,TRUE-VALUE
|
|
?CND1: SET 'XBITS,GL-P-SLOCBITS
|
|
GET TBL,K-P-MATCHLEN >TLEN
|
|
BTST GL-P-GET-FLAGS,K-P-INHIBIT /TRUE
|
|
SET 'ADJ,GL-P-ADJ
|
|
ZERO? GL-P-NAM \?CND5
|
|
ZERO? GL-P-ADJ /?CND5
|
|
GETB GL-P-ADJ,6
|
|
BTST STACK,128 \?CCL11
|
|
SET 'GL-P-NAM,GL-P-ADJ
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
?CND5: ZERO? GL-P-NAM \?CND13
|
|
ZERO? GL-P-ADJ \?CND13
|
|
EQUAL? GL-P-GET-FLAGS,K-P-ALL /?CND13
|
|
ZERO? GL-P-GWIMBIT \?CND13
|
|
ZERO? VRB /FALSE
|
|
ICALL2 RT-NOT-IN-SENTENCE-MSG,STR?226
|
|
RFALSE
|
|
?CCL11: CALL RT-WT?,GL-P-ADJ,16,3 >BTS
|
|
ZERO? BTS /?CND5
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
PUT TBL,K-P-MATCHLEN,1
|
|
PUT TBL,1,TH-INTDIR
|
|
SET 'GL-P-DIRECTION,BTS
|
|
RTRUE
|
|
?CND13: EQUAL? GL-P-GET-FLAGS,K-P-ALL \?CCL22
|
|
ZERO? GL-P-SLOCBITS \?CND21
|
|
?CCL22: SET 'GL-P-SLOCBITS,-1
|
|
?CND21: EQUAL? TBL,GL-P-PRSO \?CCL27
|
|
GET GL-P-OFW,0 >GL-P-OF
|
|
JUMP ?CND25
|
|
?CCL27: GET GL-P-OFW,1 >GL-P-OF
|
|
?CND25: SET 'GL-P-TABLE,TBL
|
|
?PRG28: ZERO? GCHECK /?CCL32
|
|
ICALL2 RT-GLOBAL-CHECK,TBL
|
|
JUMP ?CND30
|
|
?CCL32: ZERO? GL-NOW-LIT? /?CND33
|
|
FCLEAR CH-PLAYER,FL-TRANSPARENT
|
|
ICALL RT-DO-SL,GL-PLACE-CUR,SOG,SIR
|
|
FSET CH-PLAYER,FL-TRANSPARENT
|
|
?CND33: ICALL RT-DO-SL,CH-PLAYER,SH,SC
|
|
?CND30: GET TBL,K-P-MATCHLEN
|
|
SUB STACK,TLEN >LEN
|
|
BTST GL-P-GET-FLAGS,K-P-ALL /?CND35
|
|
BTST GL-P-GET-FLAGS,K-P-ONE \?CCL38
|
|
ZERO? LEN /?CCL38
|
|
EQUAL? LEN,1 /?CND41
|
|
RANDOM LEN
|
|
GET TBL,STACK
|
|
PUT TBL,1,STACK
|
|
PRINTI "[How about "
|
|
GET TBL,1
|
|
ICALL2 RT-THEO-PRINT,STACK
|
|
PRINTI "?]"
|
|
CRLF
|
|
?CND41: PUT TBL,K-P-MATCHLEN,1
|
|
?CND35: ADD TLEN,1
|
|
GET TBL,STACK >X
|
|
ZERO? GL-P-ADJ /?CND86
|
|
ZERO? GL-P-NAM \?CND86
|
|
ZERO? X /?CND86
|
|
PRINTC 91
|
|
ICALL2 RT-THEO-PRINT,X
|
|
PRINTC 93
|
|
CRLF
|
|
CRLF
|
|
?CND86: SET 'GL-P-SLOCBITS,XBITS
|
|
PUT GL-P-NAMW,GL-P-PHR,GL-P-NAM
|
|
PUT GL-P-ADJW,GL-P-PHR,GL-P-ADJ
|
|
SET 'GL-P-NAM,FALSE-VALUE
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
RTRUE
|
|
?CCL38: GRTR? LEN,1 /?CTR43
|
|
ZERO? LEN \?CCL44
|
|
EQUAL? GL-P-SLOCBITS,-1 /?CCL44
|
|
?CTR43: EQUAL? GL-P-SLOCBITS,-1 \?CCL51
|
|
SET 'GL-P-SLOCBITS,XBITS
|
|
SET 'OLEN,LEN
|
|
GET TBL,K-P-MATCHLEN
|
|
SUB STACK,LEN
|
|
PUT TBL,K-P-MATCHLEN,STACK
|
|
JUMP ?PRG28
|
|
?CCL51: PUT GL-P-NAMW,GL-P-PHR,GL-P-NAM
|
|
PUT GL-P-ADJW,GL-P-PHR,GL-P-ADJ
|
|
ZERO? LEN \?CND52
|
|
SET 'LEN,OLEN
|
|
?CND52: ZERO? GL-P-NAM /?CCL56
|
|
ADD TLEN,1
|
|
GET TBL,STACK >OBJ
|
|
ZERO? OBJ /?CCL56
|
|
GETP OBJ,P?GENERIC
|
|
CALL STACK,TBL,LEN >OBJ
|
|
ZERO? OBJ /?CCL56
|
|
EQUAL? OBJ,TH-NOT-HERE-OBJECT /FALSE
|
|
PUT TBL,1,OBJ
|
|
PUT TBL,K-P-MATCHLEN,1
|
|
SET 'GL-P-NAM,FALSE-VALUE
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
RTRUE
|
|
?CCL56: ZERO? VRB /?CCL63
|
|
EQUAL? GL-WINNER,CH-PLAYER /?CCL63
|
|
PRINT K-DONT-UNDERSTAND-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CCL63: ZERO? VRB /?CCL67
|
|
ZERO? GL-P-NAM /?CCL67
|
|
ICALL RT-WHICH-PRINT,TLEN,LEN,TBL
|
|
EQUAL? TBL,GL-P-PRSO \?CCL72
|
|
SET 'GL-P-ACLAUSE,K-P-NC1
|
|
JUMP ?CND70
|
|
?CCL72: SET 'GL-P-ACLAUSE,K-P-NC2
|
|
?CND70: SET 'GL-P-AADJ,GL-P-ADJ
|
|
SET 'GL-P-ANAM,GL-P-NAM
|
|
ICALL RT-ORPHAN,FALSE-VALUE,FALSE-VALUE
|
|
SET 'GL-P-ORPH,TRUE-VALUE
|
|
JUMP ?CND54
|
|
?CCL67: ZERO? VRB /?CND54
|
|
ICALL2 RT-NOT-IN-SENTENCE-MSG,STR?226
|
|
?CND54: SET 'GL-P-NAM,FALSE-VALUE
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
RFALSE
|
|
?CCL44: ZERO? LEN \?CCL75
|
|
ZERO? GCHECK /?CCL75
|
|
PUT GL-P-NAMW,GL-P-PHR,GL-P-NAM
|
|
PUT GL-P-ADJW,GL-P-PHR,GL-P-ADJ
|
|
ZERO? VRB /?CND78
|
|
SET 'GL-P-SLOCBITS,XBITS
|
|
ZERO? GL-NOW-LIT? \?CTR81
|
|
CALL1 RT-TALK-VERB?
|
|
ZERO? STACK /?CCL82
|
|
?CTR81: ICALL RT-OBJ-FOUND,TH-NOT-HERE-OBJECT,TBL
|
|
SET 'GL-P-XNAM,GL-P-NAM
|
|
SET 'GL-P-NAM,FALSE-VALUE
|
|
SET 'GL-P-XADJ,GL-P-ADJ
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
RTRUE
|
|
?CCL82: PRINT K-TOO-DARK-MSG
|
|
CRLF
|
|
?CND78: SET 'GL-P-NAM,FALSE-VALUE
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
RFALSE
|
|
?CCL75: ZERO? LEN \?CND35
|
|
SET 'GCHECK,TRUE-VALUE
|
|
JUMP ?PRG28
|
|
|
|
|
|
.FUNCT RT-MOBY-FIND,TBL,OBJ,LEN,FOO,NAM,ADJ,TTBL,COBJ-GOOD?,CT,?TMP1
|
|
SET 'OBJ,1
|
|
SET 'NAM,GL-P-NAM
|
|
SET 'ADJ,GL-P-ADJ
|
|
SET 'GL-P-NAM,GL-P-XNAM
|
|
SET 'GL-P-ADJ,GL-P-XADJ
|
|
PUT TBL,K-P-MATCHLEN,0
|
|
?PRG1: CALL2 RT-THIS-IT?,OBJ
|
|
ZERO? STACK /?CND3
|
|
LOC OBJ
|
|
ZERO? STACK /?CTR6
|
|
LOC OBJ
|
|
CALL2 RT-THIS-IT?,STACK
|
|
ZERO? STACK \?CCL7
|
|
?CTR6: GET TBL,K-P-MATCHLEN >CT
|
|
LOC OBJ
|
|
ZERO? STACK \?CTR11
|
|
FSET? OBJ,FL-PERSON /?CTR11
|
|
INTBL? OBJ,FIND-NO-LOCS+2,3 \?CCL12
|
|
?CTR11: EQUAL? CT,1 \?CCL18
|
|
ZERO? COBJ-GOOD? \?CCL18
|
|
SET 'COBJ-GOOD?,TRUE-VALUE
|
|
PUT TBL,K-P-MATCHLEN,0
|
|
JUMP ?CND16
|
|
?CCL18: ZERO? CT \?CND16
|
|
SET 'COBJ-GOOD?,TRUE-VALUE
|
|
?CND16: ICALL RT-OBJ-FOUND,OBJ,TBL
|
|
JUMP ?CND3
|
|
?CCL12: ZERO? CT \?CND3
|
|
CALL RT-OBJ-FOUND,OBJ,TBL >FOO
|
|
JUMP ?CND3
|
|
?CCL7: IN? OBJ,ROOMS \?CND3
|
|
GET TBL,K-P-MATCHLEN
|
|
ZERO? STACK \?CND3
|
|
CALL2 RT-MATCH-PSEUDO,OBJ
|
|
ZERO? STACK /?CND3
|
|
CALL RT-OBJ-FOUND,OBJ,TBL >FOO
|
|
?CND3: IGRTR? 'OBJ,LAST-OBJECT \?PRG1
|
|
GET TBL,K-P-MATCHLEN >CT
|
|
ZERO? CT /?CCL30
|
|
ZERO? COBJ-GOOD? /?CCL30
|
|
EQUAL? GL-PLACE-CUR,RM-DIOGENES-CLUB \?CND29
|
|
ADD TBL,2 >?TMP1
|
|
GET TBL,K-P-MATCHLEN
|
|
INTBL? CH-HOLMES,?TMP1,STACK >TTBL \?CND29
|
|
?CCL30: CALL RT-PARSE-EVENT?,GL-P-NAM,GL-P-ADJ >OBJ
|
|
ZERO? OBJ /?CND29
|
|
ZERO? TTBL /?CCL40
|
|
PUT TTBL,0,OBJ
|
|
JUMP ?CND38
|
|
?CCL40: ZERO? COBJ-GOOD? \?CND41
|
|
GRTR? CT,0 \?CND41
|
|
SUB CT,1
|
|
PUT TBL,K-P-MATCHLEN,STACK
|
|
?CND41: ICALL RT-OBJ-FOUND,OBJ,TBL
|
|
?CND38: SET 'COBJ-GOOD?,TRUE-VALUE
|
|
?CND29: GET TBL,K-P-MATCHLEN >LEN
|
|
EQUAL? LEN,1 \?CND45
|
|
ZERO? COBJ-GOOD? \?CCL49
|
|
SET 'GL-P-MOBY-FOUND,TH-NOT-HERE-OBJECT
|
|
JUMP ?CND45
|
|
?CCL49: GET TBL,1 >GL-P-MOBY-FOUND
|
|
?CND45: SET 'GL-P-NAM,NAM
|
|
SET 'GL-P-ADJ,ADJ
|
|
RETURN LEN
|
|
|
|
|
|
.FUNCT RT-MATCH-PSEUDO,OBJ,RMG,RMGL,TTBL,?TMP1
|
|
GETP OBJ,P?PSEUDOS >RMG
|
|
ZERO? RMG /FALSE
|
|
GETB RMG,0 >RMGL
|
|
INC 'RMG
|
|
?PRG3: GET RMG,1 >TTBL
|
|
ZERO? TTBL /?CND5
|
|
ADD TTBL,1 >?TMP1
|
|
GETB TTBL,0
|
|
INTBL? GL-P-NAM,?TMP1,STACK \?CND5
|
|
ZERO? GL-P-ADJ \?PRD11
|
|
RETURN RMG
|
|
?PRD11: GET RMG,0 >TTBL
|
|
ZERO? TTBL /?CND5
|
|
ADD TTBL,1 >?TMP1
|
|
GETB TTBL,0
|
|
INTBL? GL-P-ADJ,?TMP1,STACK \?CND5
|
|
RETURN RMG
|
|
?CND5: ADD RMG,6 >RMG
|
|
DLESS? 'RMGL,1 \?PRG3
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-GLOBAL-CHECK,TBL,LEN,RMG,RMGL,CNT,OBJ,OBITS,FOO
|
|
GET TBL,K-P-MATCHLEN >LEN
|
|
SET 'OBITS,GL-P-SLOCBITS
|
|
CALL2 RT-THIS-IT?,GL-PLACE-CUR
|
|
ZERO? STACK /?CND1
|
|
ICALL RT-OBJ-FOUND,GL-PLACE-CUR,TBL
|
|
?CND1: GETPT GL-PLACE-CUR,P?GLOBAL >RMG
|
|
ZERO? RMG /?CND3
|
|
PTSIZE RMG >RMGL
|
|
DEC 'RMGL
|
|
?PRG5: GETB RMG,CNT >OBJ
|
|
FIRST? OBJ \?CND7
|
|
IN? OBJ,ROOMS /?CND7
|
|
ICALL RT-SEARCH-LIST,OBJ,TBL,K-P-SRCALL
|
|
?CND7: CALL2 RT-THIS-IT?,OBJ
|
|
ZERO? STACK /?CND11
|
|
ICALL RT-OBJ-FOUND,OBJ,TBL
|
|
?CND11: IGRTR? 'CNT,RMGL \?PRG5
|
|
?CND3: GET TBL,K-P-MATCHLEN
|
|
ZERO? STACK \?CND15
|
|
CALL2 RT-MATCH-PSEUDO,GL-PLACE-CUR >RMG
|
|
ZERO? RMG /?CND15
|
|
SET 'LAST-PSEUDO-LOC,GL-PLACE-CUR
|
|
GET RMG,2
|
|
PUTP PSEUDO-OBJECT,P?ACTION,STACK
|
|
ICALL RT-OBJ-FOUND,PSEUDO-OBJECT,TBL
|
|
?CND15: GET TBL,K-P-MATCHLEN
|
|
EQUAL? STACK,LEN \FALSE
|
|
SET 'GL-P-SLOCBITS,-1
|
|
SET 'GL-P-TABLE,TBL
|
|
ICALL RT-DO-SL,GLOBAL-OBJECTS,1,1
|
|
SET 'GL-P-SLOCBITS,OBITS
|
|
GET TBL,K-P-MATCHLEN
|
|
ZERO? STACK \FALSE
|
|
EQUAL? GL-PRSA,V?EXAMINE,V?LOOK-ON,V?LOOK-INSIDE /?PRD29
|
|
EQUAL? GL-PRSA,V?FIND,V?FOLLOW,V?EXIT /?PRD29
|
|
EQUAL? GL-PRSA,V?SEARCH,V?SMELL,V?WALK-TO /?PRD29
|
|
EQUAL? GL-PRSA,V?THROUGH,V?WAIT-FOR,V?WAIT \FALSE
|
|
?PRD29: ZERO? INHIBIT-ROOMS \FALSE
|
|
CALL RT-DO-SL,ROOMS,1,1
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-DO-SL,OBJ,BIT1,BIT2,BITS
|
|
ADD BIT1,BIT2
|
|
BTST GL-P-SLOCBITS,STACK \?CCL3
|
|
CALL RT-SEARCH-LIST,OBJ,GL-P-TABLE,K-P-SRCALL
|
|
RSTACK
|
|
?CCL3: BTST GL-P-SLOCBITS,BIT1 \?CCL6
|
|
CALL RT-SEARCH-LIST,OBJ,GL-P-TABLE,K-P-SRCTOP
|
|
RSTACK
|
|
?CCL6: BTST GL-P-SLOCBITS,BIT2 \TRUE
|
|
CALL RT-SEARCH-LIST,OBJ,GL-P-TABLE,K-P-SRCBOT
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-SEARCH-LIST,OBJ,TBL,LVL
|
|
FIRST? OBJ >OBJ /?BOGUS1
|
|
?BOGUS1: ZERO? OBJ /FALSE
|
|
?PRG5: EQUAL? LVL,K-P-SRCBOT /?CND7
|
|
GETPT OBJ,P?SYNONYM
|
|
ZERO? STACK /?CND7
|
|
CALL2 RT-THIS-IT?,OBJ
|
|
ZERO? STACK /?CND7
|
|
ICALL RT-OBJ-FOUND,OBJ,TBL
|
|
?CND7: ZERO? LVL \?PRD15
|
|
FSET? OBJ,FL-SURFACE /?PRD15
|
|
FSET? OBJ,FL-PERSON \?CND12
|
|
?PRD15: FIRST? OBJ \?CND12
|
|
CALL2 RT-SEE-INSIDE?,OBJ
|
|
ZERO? STACK /?CND12
|
|
FSET? OBJ,FL-SURFACE /?CTR21
|
|
FSET? OBJ,FL-PERSON \?CCL22
|
|
?CTR21: PUSH K-P-SRCALL
|
|
JUMP ?CND20
|
|
?CCL22: FSET? OBJ,FL-CONTAINER \?CCL26
|
|
FSET? OBJ,FL-OPENED /?CTR25
|
|
FSET? OBJ,FL-TRANSPARENT \?CCL26
|
|
?CTR25: PUSH K-P-SRCALL
|
|
JUMP ?CND20
|
|
?CCL26: PUSH K-P-SRCTOP
|
|
?CND20: ICALL RT-SEARCH-LIST,OBJ,TBL,STACK
|
|
?CND12: NEXT? OBJ >OBJ /?BOGUS31
|
|
?BOGUS31: ZERO? OBJ \?PRG5
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-THIS-IT?,OBJ,SYNS,SYNSIZE,ADJS,ADJSIZE
|
|
ZERO? GL-P-NAM /?CCL3
|
|
GETPT OBJ,P?SYNONYM >SYNS
|
|
ZERO? SYNS /FALSE
|
|
PTSIZE SYNS
|
|
DIV STACK,2 >SYNSIZE
|
|
INTBL? GL-P-NAM,SYNS,SYNSIZE \FALSE
|
|
?CCL3: ZERO? GL-P-ADJ /?CND1
|
|
GETPT OBJ,P?ADJECTIVE >ADJS
|
|
ZERO? ADJS /FALSE
|
|
PTSIZE ADJS
|
|
DIV STACK,2 >ADJSIZE
|
|
INTBL? GL-P-ADJ,ADJS,ADJSIZE \FALSE
|
|
?CND1: ZERO? INHIBIT-ROOMS /?CCL15
|
|
IN? OBJ,ROOMS /FALSE
|
|
?CCL15: ZERO? GL-P-OF /?CND13
|
|
ZERO? ADJS /?CND19
|
|
INTBL? GL-P-OF,ADJS,ADJSIZE /TRUE
|
|
?CND19: ZERO? SYNS /FALSE
|
|
INTBL? GL-P-OF,SYNS,SYNSIZE /TRUE
|
|
RFALSE
|
|
?CND13: ZERO? GL-P-GWIMBIT /TRUE
|
|
FSET? OBJ,GL-P-GWIMBIT /TRUE
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-OBJ-FOUND,OBJ,TBL,PTR
|
|
GET TBL,K-P-MATCHLEN
|
|
ADD STACK,1 >PTR
|
|
LESS? PTR,K-P-OBJ-TBL-LEN /?CCL3
|
|
SET 'GL-P-OVERFLOW,TRUE-VALUE
|
|
RFALSE
|
|
?CCL3: LESS? PTR,K-P-OBJ-TBL-LEN \TRUE
|
|
SET 'GL-P-OVERFLOW,FALSE-VALUE
|
|
PUT TBL,PTR,OBJ
|
|
PUT TBL,K-P-MATCHLEN,PTR
|
|
FSET? OBJ,FL-NEEDS-IDENTITY \TRUE
|
|
PUTP OBJ,P?OBJ-ADJ,GL-P-ADJ
|
|
EQUAL? OBJ,TH-EVENT /TRUE
|
|
PUTP OBJ,P?OBJ-NOUN,GL-P-NAM
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-ITAKE,VB,L
|
|
ASSIGNED? 'VB /?CND1
|
|
SET 'VB,TRUE-VALUE
|
|
?CND1: ZERO? GL-PRSO /?CCL4
|
|
LOC GL-PRSO
|
|
ZERO? STACK \?CND3
|
|
?CCL4: ICALL1 RT-CANT-SEE-ANY-MSG
|
|
RFALSE
|
|
?CND3: LOC GL-PRSO >L
|
|
ICALL2 RT-THIS-IS-IT,GL-PRSO
|
|
FSET? GL-PRSO,FL-TAKEABLE /?CCL9
|
|
ZERO? VB /FALSE
|
|
ICALL1 RT-IMPOSSIBLE-MSG
|
|
RFALSE
|
|
?CCL9: FSET? L,FL-CONTAINER \?CCL13
|
|
FSET? L,FL-OPENABLE \?CCL13
|
|
FSET? L,FL-OPENED /?CCL13
|
|
ZERO? VB /FALSE
|
|
ICALL RT-YOUD-HAVE-TO-MSG,STR?227,L
|
|
RFALSE
|
|
?CCL13: IN? L,GL-WINNER /?CCL20
|
|
CALL RT-OBJ-TOO-HEAVY?,GL-PRSO,GL-WINNER
|
|
ZERO? STACK /?CCL20
|
|
ZERO? VB /FALSE
|
|
ICALL1 RT-CTHEO-PRINT
|
|
ICALL2 RT-IS-ARE-MSG,GL-PRSO
|
|
PRINTI "too heavy."
|
|
CRLF
|
|
RFALSE
|
|
?CCL20: CALL RT-OBJ-TOO-MANY?,GL-PRSO,GL-WINNER
|
|
ZERO? STACK /?CCL26
|
|
ZERO? VB /FALSE
|
|
ICALL RT-CYOU-MSG,STR?228,STR?229
|
|
PRINTI "holding too much already."
|
|
CRLF
|
|
RFALSE
|
|
?CCL26: FSET GL-PRSO,FL-SEEN
|
|
FSET GL-PRSO,FL-TOUCHED
|
|
FCLEAR GL-PRSO,FL-WORN
|
|
FCLEAR GL-PRSO,FL-NODESC
|
|
FCLEAR GL-PRSO,FL-NOALL
|
|
MOVE GL-PRSO,GL-WINNER
|
|
RETURN L
|
|
|
|
|
|
.FUNCT RT-ITAKE-CHECK,TBL,BITS,PRSO?,PTR,LEN,OBJ,L,GOT,TRIED-TAKE?,NEED-TAKE?
|
|
SET 'PTR,1
|
|
GET TBL,K-P-MATCHLEN >LEN
|
|
ZERO? LEN /TRUE
|
|
BAND BITS,10
|
|
ZERO? STACK /TRUE
|
|
?PRG5: GET TBL,PTR >OBJ
|
|
EQUAL? OBJ,TH-IT \?CCL9
|
|
CALL2 RT-ACCESSIBLE?,GL-P-IT-OBJECT
|
|
ZERO? STACK \?CND10
|
|
PRINT K-BE-MORE-SPECIFIC-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CND10: FSET? OBJ,FL-NEEDS-IDENTITY \?CND12
|
|
GETP TH-IT,P?OBJ-NOUN
|
|
PUTP OBJ,P?OBJ-NOUN,STACK
|
|
GETP TH-IT,P?OBJ-ADJ
|
|
PUTP OBJ,P?OBJ-ADJ,STACK
|
|
?CND12: SET 'OBJ,GL-P-IT-OBJECT
|
|
JUMP ?CND7
|
|
?CCL9: EQUAL? OBJ,CH-THEM \?CCL15
|
|
CALL2 RT-ACCESSIBLE?,GL-P-THEM-OBJECT
|
|
ZERO? STACK \?CND16
|
|
PRINT K-BE-MORE-SPECIFIC-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CND16: SET 'OBJ,GL-P-THEM-OBJECT
|
|
JUMP ?CND7
|
|
?CCL15: EQUAL? OBJ,CH-HER \?CCL19
|
|
CALL2 RT-ACCESSIBLE?,GL-P-HER-OBJECT
|
|
ZERO? STACK \?CND20
|
|
PRINT K-BE-MORE-SPECIFIC-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CND20: SET 'OBJ,GL-P-HER-OBJECT
|
|
JUMP ?CND7
|
|
?CCL19: EQUAL? OBJ,CH-HIM \?CND7
|
|
CALL2 RT-ACCESSIBLE?,GL-P-HIM-OBJECT
|
|
ZERO? STACK \?CND23
|
|
PRINT K-BE-MORE-SPECIFIC-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CND23: SET 'OBJ,GL-P-HIM-OBJECT
|
|
?CND7: EQUAL? OBJ,TH-POCKET,TH-HANDS,TH-FEET /?CND25
|
|
EQUAL? OBJ,CH-ME,CH-PLAYER,CH-YOU /?CND25
|
|
EQUAL? OBJ,ROOMS,TH-PLAYER-BODY /?CND25
|
|
EQUAL? OBJ,TH-INTDIR,TH-RIGHT,TH-LEFT /?CND25
|
|
BTST BITS,SC /?CCL34
|
|
BTST BITS,SH \?CCL34
|
|
IN? OBJ,GL-WINNER /?CND32
|
|
SET 'NEED-TAKE?,TRUE-VALUE
|
|
JUMP ?CND32
|
|
?CCL34: CALL2 RT-HELD?,OBJ
|
|
ZERO? STACK \?CND32
|
|
ZERO? PRSO? /?PRD46
|
|
GET GL-P-NAMW,0
|
|
ZERO? STACK /?PRD44
|
|
?PRD46: ZERO? PRSO? \?CCL42
|
|
GET GL-P-NAMW,1
|
|
ZERO? STACK \?CCL42
|
|
?PRD44: IN? OBJ,TH-POCKET /?CND32
|
|
?CCL42: SET 'NEED-TAKE?,TRUE-VALUE
|
|
?CND32: ZERO? NEED-TAKE? /?CND25
|
|
SET 'NEED-TAKE?,FALSE-VALUE
|
|
SET 'GL-PRSO,OBJ
|
|
LOC OBJ >L
|
|
ZERO? L \?CCL55
|
|
SET 'GOT,FALSE-VALUE
|
|
JUMP ?CND53
|
|
?CCL55: FSET? OBJ,FL-TRYTAKE \?CCL57
|
|
FSET? OBJ,FL-TAKEABLE /?CCL57
|
|
SET 'GOT,FALSE-VALUE
|
|
JUMP ?CND53
|
|
?CCL57: EQUAL? GL-WINNER,CH-PLAYER /?CCL61
|
|
SET 'GOT,FALSE-VALUE
|
|
JUMP ?CND53
|
|
?CCL61: EQUAL? L,GL-WINNER \?CCL63
|
|
BTST BITS,SHAVE \?CCL63
|
|
SET 'GOT,TRUE-VALUE
|
|
JUMP ?CND53
|
|
?CCL63: CALL RT-META-IN?,L,GL-WINNER
|
|
ZERO? STACK /?CCL67
|
|
ZERO? GL-P-MULT? \?CCL67
|
|
BTST BITS,STAKE \?CCL67
|
|
PRINTI "[taking "
|
|
ICALL2 RT-THEO-PRINT,OBJ
|
|
ZERO? L /?CND71
|
|
FSET? L,FL-CONTAINER \?CCL75
|
|
PRINTI " out of "
|
|
JUMP ?CND73
|
|
?CCL75: FSET? L,FL-SURFACE \?CCL77
|
|
PRINTI " off "
|
|
JUMP ?CND73
|
|
?CCL77: PRINTI " from "
|
|
?CND73: ICALL2 RT-THEO-PRINT,L
|
|
?CND71: PRINTI " first]."
|
|
CRLF
|
|
SET 'NEED-TAKE?,TRUE-VALUE
|
|
CALL1 RT-ITAKE >GOT
|
|
JUMP ?CND53
|
|
?CCL67: SET 'GOT,FALSE-VALUE
|
|
?CND53: ZERO? GOT \?CND25
|
|
BTST BITS,SHAVE \?CND25
|
|
ZERO? NEED-TAKE? \FALSE
|
|
EQUAL? LEN,PTR \?PRD88
|
|
ZERO? GL-P-MULT? \?CCL86
|
|
?PRD88: EQUAL? OBJ,TH-NOT-HERE-OBJECT /?CCL86
|
|
LOC OBJ
|
|
EQUAL? STACK,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CCL86
|
|
PRINTI "Don't be silly"
|
|
JUMP ?CND84
|
|
?CCL86: ICALL1 RT-WINNER-NOT-HOLDING-MSG
|
|
EQUAL? LEN,PTR \?CCL94
|
|
ZERO? GL-P-MULT? /?CCL94
|
|
PRINTI "all of those things"
|
|
JUMP ?CND84
|
|
?CCL94: EQUAL? OBJ,TH-NOT-HERE-OBJECT \?CCL98
|
|
SET 'GL-P-IT-OBJECT,OBJ
|
|
ICALL2 DPRINT,OBJ
|
|
JUMP ?CND84
|
|
?CCL98: ICALL2 RT-THIS-IS-IT,OBJ
|
|
FSET? OBJ,FL-PLURAL \?CCL101
|
|
PRINTI "any "
|
|
ICALL2 DPRINT,OBJ
|
|
JUMP ?CND84
|
|
?CCL101: ICALL2 RT-A-PRINT,OBJ
|
|
?CND84: PRINTC 46
|
|
CRLF
|
|
RFALSE
|
|
?CND25: IGRTR? 'PTR,LEN \?PRG5
|
|
RTRUE
|
|
|
|
|
|
.FUNCT RT-MANY-CHECK,LOSS,TMP,?TMP1
|
|
GET GL-P-PRSO,K-P-MATCHLEN
|
|
GRTR? STACK,1 \?CCL3
|
|
GETB GL-P-SYNTAX,K-P-SLOC1
|
|
BTST STACK,SMANY /?CCL3
|
|
SET 'LOSS,1
|
|
JUMP ?CND1
|
|
?CCL3: GET GL-P-PRSI,K-P-MATCHLEN
|
|
GRTR? STACK,1 \?CND1
|
|
GETB GL-P-SYNTAX,K-P-SLOC2
|
|
BTST STACK,SMANY /?CND1
|
|
SET 'LOSS,2
|
|
?CND1: ZERO? LOSS /TRUE
|
|
PRINTI "[You cannot refer to more than one object at a time with """
|
|
GET GL-P-ITBL,K-P-VERBN >TMP
|
|
ZERO? TMP \?CCL14
|
|
PRINTI "tell"
|
|
JUMP ?CND12
|
|
?CCL14: ZERO? GL-P-ORPH \?CTR15
|
|
ZERO? GL-P-MERGED /?CCL16
|
|
?CTR15: GET TMP,0
|
|
PRINTB STACK
|
|
JUMP ?CND12
|
|
?CCL16: GETB TMP,2 >?TMP1
|
|
GETB TMP,3
|
|
ICALL RT-WORD-PRINT,?TMP1,STACK
|
|
?CND12: PRINTI ".""]"
|
|
CRLF
|
|
RFALSE
|
|
|
|
|
|
.FUNCT RT-IS-LIT?,RM,RMFLG,OHERE,LIT
|
|
ASSIGNED? 'RMFLG /?CND1
|
|
SET 'RMFLG,TRUE-VALUE
|
|
?CND1: ZERO? RM \?CND3
|
|
SET 'RM,GL-PLACE-CUR
|
|
?CND3: ZERO? RMFLG /?CCL7
|
|
FSET? RM,FL-LIGHTED /TRUE
|
|
?CCL7: ZERO? GL-ALW-LIT? /?CND5
|
|
EQUAL? GL-WINNER,CH-PLAYER /TRUE
|
|
?CND5: FSET? RM,FL-INDOORS /?CND13
|
|
CALL1 RT-TIME-OF-DAY
|
|
ZERO? STACK \TRUE
|
|
?CND13: SET 'GL-P-GWIMBIT,FL-LIGHTED
|
|
SET 'OHERE,GL-PLACE-CUR
|
|
SET 'GL-PLACE-CUR,RM
|
|
PUT GL-P-MERGE,K-P-MATCHLEN,0
|
|
SET 'GL-P-TABLE,GL-P-MERGE
|
|
SET 'GL-P-SLOCBITS,-1
|
|
SET 'GL-P-OF,FALSE-VALUE
|
|
EQUAL? OHERE,RM \?CND17
|
|
ICALL RT-DO-SL,GL-WINNER,1,1
|
|
EQUAL? GL-WINNER,CH-PLAYER /?CND17
|
|
IN? CH-PLAYER,RM \?CND17
|
|
ICALL RT-DO-SL,CH-PLAYER,1,1
|
|
?CND17: ICALL RT-DO-SL,RM,1,1
|
|
GET GL-P-TABLE,K-P-MATCHLEN
|
|
GRTR? STACK,0 \?CND23
|
|
SET 'LIT,TRUE-VALUE
|
|
?CND23: SET 'GL-PLACE-CUR,OHERE
|
|
SET 'GL-P-GWIMBIT,0
|
|
RETURN LIT
|
|
|
|
|
|
.FUNCT RT-PERFORM,A,O,I,W-ROOM,W-LOC,I-LOC,O-LOC,V,OA,OO,OI,ONP,WHO
|
|
ZERO? WINNER-IS-WIGGINS /?CND1
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CND1
|
|
EQUAL? GL-PRSA,V?TELL /?CND1
|
|
SET 'GL-WINNER,CH-WIGGINS
|
|
ICALL2 RT-SPOKEN-TO-MSG,GL-WINNER
|
|
?CND1: SET 'WINNER-IS-WIGGINS,FALSE-VALUE
|
|
FSET? GL-WINNER,FL-ALIVE /?CND6
|
|
ICALL RT-NOT-LIKELY-MSG,GL-WINNER,STR?230
|
|
ICALL1 RT-P-CLEAR
|
|
RETURN 2
|
|
?CND6: INTBL? A,GL-SEE-VERBS+2,20 \?CND8
|
|
ZERO? GL-NOW-LIT? \?CND8
|
|
PRINT K-TOO-DARK-MSG
|
|
CRLF
|
|
RETURN 2
|
|
?CND8: SET 'OA,GL-PRSA
|
|
SET 'OO,GL-PRSO
|
|
SET 'OI,GL-PRSI
|
|
SET 'ONP,GL-NOW-PRSI?
|
|
CALL1 RT-ANYONE-HERE? >WHO
|
|
SET 'V,0
|
|
EQUAL? A,V?WALK /?CND12
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CCL16
|
|
EQUAL? GL-PRSA,V?WHO,V?WHAT,V?WHERE \?CCL16
|
|
ZERO? WHO \?CCL21
|
|
ICALL1 RT-NOBODY-TO-ASK-MSG
|
|
RETURN 2
|
|
?CCL21: SET 'GL-WINNER,WHO
|
|
ICALL2 RT-SPOKEN-TO-MSG,WHO
|
|
JUMP ?CND14
|
|
?CCL16: EQUAL? GL-WINNER,CH-PLAYER \?CCL23
|
|
EQUAL? GL-PRSA,V?ASK-FOR-1,V?ASK-ABOUT-1 \?CCL23
|
|
ZERO? WHO \?CCL28
|
|
ICALL1 RT-NOBODY-TO-ASK-MSG
|
|
RETURN 2
|
|
?CCL28: ICALL2 RT-SPOKEN-TO-MSG,WHO
|
|
SET 'GL-PRSI,GL-PRSO
|
|
SET 'GL-PRSO,WHO
|
|
EQUAL? GL-PRSA,V?ASK-FOR-1 \?CCL31
|
|
SET 'GL-PRSA,V?ASK-FOR
|
|
JUMP ?CND29
|
|
?CCL31: EQUAL? GL-PRSA,V?ASK-ABOUT-1 \?CND29
|
|
SET 'GL-PRSA,V?ASK-ABOUT
|
|
?CND29: SET 'A,GL-PRSA
|
|
SET 'O,GL-PRSO
|
|
SET 'I,GL-PRSI
|
|
JUMP ?CND14
|
|
?CCL23: EQUAL? GL-WINNER,CH-PLAYER \?CND14
|
|
EQUAL? O,CH-ME,CH-PLAYER \?CND14
|
|
EQUAL? GL-PRSA,V?TELL,V?TELL-ABOUT,V?ASK-ABOUT /?CCL33
|
|
EQUAL? GL-PRSA,V?ASK-FOR,V?QUESTION,V?REPLY /?CCL33
|
|
EQUAL? GL-PRSA,V?THANK,V?YELL,V?HELLO /?CCL33
|
|
EQUAL? GL-PRSA,V?GOODBYE,V?SAY,V?ALARM /?CCL33
|
|
EQUAL? GL-PRSA,V?PASSWORD \?CND14
|
|
?CCL33: ZERO? WHO \?CCL44
|
|
ICALL1 RT-TALK-TO-SELF-MSG
|
|
RETURN 2
|
|
?CCL44: SET 'GL-WINNER,WHO
|
|
ICALL2 RT-SPOKEN-TO-MSG,WHO
|
|
?CND14: EQUAL? CH-YOU,I,O \?CND45
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CCL49
|
|
ZERO? WHO \?CCL52
|
|
ICALL1 RT-TALK-TO-SELF-MSG
|
|
RETURN 2
|
|
?CCL52: SET 'GL-WINNER,WHO
|
|
ICALL2 RT-SPOKEN-TO-MSG,WHO
|
|
JUMP ?CND47
|
|
?CCL49: SET 'GL-P-QCONTEXT-TH,GL-WINNER
|
|
SET 'GL-P-QCONTEXT-RM,GL-PLACE-CUR
|
|
SET 'WHO,GL-WINNER
|
|
?CND47: EQUAL? I,CH-YOU \?CND53
|
|
SET 'I,WHO
|
|
?CND53: EQUAL? O,CH-YOU \?CND45
|
|
SET 'O,WHO
|
|
?CND45: EQUAL? TH-IT,I,O \?CND57
|
|
CALL2 RT-ACCESSIBLE?,GL-P-IT-OBJECT
|
|
ZERO? STACK \?CND57
|
|
ZERO? I \?CCL63
|
|
ICALL1 RT-FAKE-ORPHAN-MSG
|
|
RETURN 2
|
|
?CCL63: ICALL2 RT-CANT-SEE-ANY-MSG,GL-P-IT-OBJECT
|
|
RETURN 2
|
|
?CND57: EQUAL? CH-THEM,I,O \?CND64
|
|
CALL2 RT-VISIBLE?,GL-P-THEM-OBJECT
|
|
ZERO? STACK /?CCL68
|
|
EQUAL? CH-THEM,O \?CND69
|
|
SET 'O,GL-P-THEM-OBJECT
|
|
?CND69: EQUAL? CH-THEM,I \?CND64
|
|
SET 'I,GL-P-THEM-OBJECT
|
|
?CND64: EQUAL? CH-HER,I,O \?CND76
|
|
CALL2 RT-VISIBLE?,GL-P-HER-OBJECT
|
|
ZERO? STACK /?CCL80
|
|
EQUAL? GL-P-HER-OBJECT,GL-WINNER \?CND81
|
|
CALL2 RT-NO-OTHER?,TRUE-VALUE
|
|
ZERO? STACK /?CND81
|
|
RETURN 2
|
|
?CCL68: ZERO? I \?CCL75
|
|
ICALL1 RT-FAKE-ORPHAN-MSG
|
|
RETURN 2
|
|
?CCL75: ICALL2 RT-CANT-SEE-ANY-MSG,GL-P-THEM-OBJECT
|
|
RETURN 2
|
|
?CND81: EQUAL? CH-HER,O \?CND85
|
|
SET 'O,GL-P-HER-OBJECT
|
|
?CND85: EQUAL? CH-HER,I \?CND76
|
|
SET 'I,GL-P-HER-OBJECT
|
|
?CND76: EQUAL? CH-HIM,I,O \?CND92
|
|
CALL2 RT-VISIBLE?,GL-P-HIM-OBJECT
|
|
ZERO? STACK /?CCL96
|
|
EQUAL? GL-P-HIM-OBJECT,GL-WINNER \?CND97
|
|
CALL1 RT-NO-OTHER?
|
|
ZERO? STACK /?CND97
|
|
RETURN 2
|
|
?CCL80: ZERO? I \?CCL91
|
|
ICALL1 RT-FAKE-ORPHAN-MSG
|
|
RETURN 2
|
|
?CCL91: ICALL2 RT-CANT-SEE-ANY-MSG,GL-P-HER-OBJECT
|
|
RETURN 2
|
|
?CND97: EQUAL? CH-HIM,O \?CND101
|
|
SET 'O,GL-P-HIM-OBJECT
|
|
?CND101: EQUAL? CH-HIM,I \?CND92
|
|
SET 'I,GL-P-HIM-OBJECT
|
|
?CND92: EQUAL? O,TH-IT \?CND108
|
|
SET 'O,GL-P-IT-OBJECT
|
|
?CND108: EQUAL? I,TH-IT \?CND12
|
|
SET 'I,GL-P-IT-OBJECT
|
|
?CND12: EQUAL? A,V?TAKE \?CND112
|
|
ZERO? O /?CND112
|
|
ZERO? I \?CND112
|
|
LOC O
|
|
ZERO? STACK /?CND112
|
|
LOC O >I
|
|
?CND112: SET 'GL-PRSA,A
|
|
SET 'GL-PRSI,I
|
|
SET 'GL-PRSO,O
|
|
EQUAL? A,V?WALK /?CND118
|
|
EQUAL? TH-NOT-HERE-OBJECT,O,I \?CND118
|
|
CALL RT-TH-NOT-HERE-OBJECT >V
|
|
ZERO? V /?CND118
|
|
SET 'GL-P-GOOD,FALSE-VALUE
|
|
?CND118: ICALL2 RT-THIS-IS-IT,GL-PRSI
|
|
ICALL2 RT-THIS-IS-IT,GL-PRSO
|
|
SET 'I,GL-PRSI
|
|
SET 'O,GL-PRSO
|
|
EQUAL? O,ROOMS \?CND124
|
|
SET 'O,FALSE-VALUE
|
|
?CND124: LOC GL-WINNER >W-LOC
|
|
FSET? W-LOC,FL-VEHICLE /?CTR127
|
|
FSET? W-LOC,FL-CONTAINER /?CTR127
|
|
FSET? W-LOC,FL-SURFACE \?CCL128
|
|
?CTR127: LOC W-LOC >W-ROOM
|
|
JUMP ?CND126
|
|
?CCL96: ZERO? I \?CCL107
|
|
ICALL1 RT-FAKE-ORPHAN-MSG
|
|
RETURN 2
|
|
?CCL107: ICALL2 RT-CANT-SEE-ANY-MSG,GL-P-HIM-OBJECT
|
|
RETURN 2
|
|
?CCL128: SET 'W-ROOM,W-LOC
|
|
?CND126: ZERO? V \?CND132
|
|
GETP GL-WINNER,P?ACTION
|
|
CALL STACK,K-M-WINNER >V
|
|
?CND132: ZERO? V \?CND134
|
|
GETP W-ROOM,P?ACTION
|
|
CALL STACK,K-M-BEG >V
|
|
?CND134: ZERO? V \?CND136
|
|
GET PREACTIONS,A
|
|
CALL STACK >V
|
|
?CND136: ZERO? V \?CND138
|
|
EQUAL? GL-WINNER,CH-PLAYER \?CND138
|
|
FSET? W-LOC,FL-VEHICLE /?CCL139
|
|
FSET? W-LOC,FL-CONTAINER /?CCL139
|
|
FSET? W-LOC,FL-SURFACE \?CND138
|
|
?CCL139: GETP W-LOC,P?CONTFCN
|
|
CALL STACK,K-M-CANT >V
|
|
?CND138: ZERO? V \?CND146
|
|
EQUAL? A,V?WALK /?CND146
|
|
EQUAL? A,V?TELL-ABOUT,V?ASK-ABOUT,V?ASK-FOR /?CND146
|
|
ZERO? I /?CND151
|
|
LOC I >I-LOC
|
|
ZERO? I-LOC /?CND151
|
|
FSET? I-LOC,FL-VEHICLE /?CCL152
|
|
FSET? I-LOC,FL-CONTAINER /?CCL152
|
|
FSET? I-LOC,FL-SURFACE /?CCL152
|
|
FSET? I-LOC,FL-ALIVE \?CND151
|
|
?CCL152: SET 'GL-NOW-PRSI?,TRUE-VALUE
|
|
GETP I-LOC,P?CONTFCN
|
|
CALL STACK,K-M-CONT >V
|
|
?CND151: ZERO? O /?CND160
|
|
LOC O >O-LOC
|
|
ZERO? O-LOC /?CND160
|
|
FSET? O-LOC,FL-VEHICLE /?CCL161
|
|
FSET? O-LOC,FL-CONTAINER /?CCL161
|
|
FSET? O-LOC,FL-SURFACE /?CCL161
|
|
FSET? O-LOC,FL-ALIVE \?CND160
|
|
?CCL161: SET 'GL-NOW-PRSI?,FALSE-VALUE
|
|
GETP O-LOC,P?CONTFCN
|
|
CALL STACK,K-M-CONT >V
|
|
?CND160: ZERO? I /?CND146
|
|
SET 'GL-NOW-PRSI?,TRUE-VALUE
|
|
GETP I,P?ACTION
|
|
CALL STACK >V
|
|
?CND146: ZERO? V \?CND171
|
|
ZERO? O /?CND171
|
|
EQUAL? A,V?WALK /?CND171
|
|
SET 'GL-NOW-PRSI?,FALSE-VALUE
|
|
GETP O,P?ACTION
|
|
CALL STACK >V
|
|
?CND171: ZERO? V \?CND176
|
|
GET ACTIONS,A
|
|
CALL STACK >V
|
|
?CND176: ZERO? V \?CND178
|
|
GETP W-LOC,P?ACTION
|
|
CALL STACK,K-M-END >V
|
|
?CND178: ZERO? GL-PRSI /?CND180
|
|
FSET? GL-PRSI,FL-LOSE-IDENTITY \?CND180
|
|
PUTP GL-PRSI,P?OBJ-NOUN,FALSE-VALUE
|
|
PUTP GL-PRSI,P?OBJ-ADJ,FALSE-VALUE
|
|
?CND180: ZERO? GL-PRSO /?CND184
|
|
FSET? GL-PRSO,FL-LOSE-IDENTITY \?CND184
|
|
PUTP GL-PRSO,P?OBJ-NOUN,FALSE-VALUE
|
|
PUTP GL-PRSO,P?OBJ-ADJ,FALSE-VALUE
|
|
?CND184: SET 'GL-PRSA,OA
|
|
SET 'GL-PRSO,OO
|
|
SET 'GL-PRSI,OI
|
|
SET 'GL-NOW-PRSI?,ONP
|
|
RETURN V
|
|
|
|
|
|
.FUNCT RT-SET-GL-PLACE-CUR
|
|
LOC GL-WINNER
|
|
FSET? STACK,FL-VEHICLE \?CCL3
|
|
LOC GL-WINNER
|
|
LOC STACK >GL-PLACE-CUR
|
|
RETURN GL-PLACE-CUR
|
|
?CCL3: LOC GL-WINNER >GL-PLACE-CUR
|
|
RETURN GL-PLACE-CUR
|
|
|
|
|
|
.FUNCT RT-PARSER,PTR,WRD,VAL,VERB,OF-FLAG,LEN,DIR,NW,LW,CNT,OWINNER,OMERGED,TMP1,?TMP2,?TMP1
|
|
?FCN: SET 'PTR,K-P-LEXSTART
|
|
SET 'GL-FUNNY-CLAUSE?,FALSE-VALUE
|
|
ZERO? GL-P-ORPH \?CND1
|
|
COPYT GL-P-ITBL,GL-P-OTBL,20
|
|
?CND1: COPYT GL-P-ITBL,0,20
|
|
SET 'GL-P-NAM,FALSE-VALUE
|
|
SET 'GL-P-ADJ,FALSE-VALUE
|
|
SET 'GL-P-XNAM,FALSE-VALUE
|
|
SET 'GL-P-XADJ,FALSE-VALUE
|
|
SET 'GL-P-DIR-WORD,FALSE-VALUE
|
|
ZERO? GL-P-ORPH \?CND3
|
|
PUT GL-P-NAMW,0,FALSE-VALUE
|
|
PUT GL-P-NAMW,1,FALSE-VALUE
|
|
PUT GL-P-ADJW,0,FALSE-VALUE
|
|
PUT GL-P-ADJW,1,FALSE-VALUE
|
|
PUT GL-P-OFW,0,FALSE-VALUE
|
|
PUT GL-P-OFW,1,FALSE-VALUE
|
|
?CND3: SET 'OMERGED,GL-P-MERGED
|
|
SET 'OWINNER,GL-WINNER
|
|
SET 'GL-P-MERGED,FALSE-VALUE
|
|
SET 'GL-P-END-ON-PREP,FALSE-VALUE
|
|
PUT GL-P-PRSO,K-P-MATCHLEN,0
|
|
PUT GL-P-PRSI,K-P-MATCHLEN,0
|
|
PUT GL-P-BUTS,K-P-MATCHLEN,0
|
|
ZERO? GL-P-QUOT \?CND5
|
|
EQUAL? GL-WINNER,CH-PLAYER /?CND5
|
|
SET 'GL-WINNER,CH-PLAYER
|
|
ICALL1 RT-SET-GL-PLACE-CUR
|
|
CALL1 RT-IS-LIT? >GL-NOW-LIT?
|
|
?CND5: ZERO? GL-RESERVE-PTR /?CCL11
|
|
SET 'PTR,GL-RESERVE-PTR
|
|
ICALL RT-STUFF,GL-P-P-LEX,GL-P-T-LEX
|
|
COPYT GL-P-RIBUF,GL-P-PIBUF,K-P-INBUF-SIZE
|
|
ZERO? GL-DESC-LEVEL /?CND12
|
|
EQUAL? CH-PLAYER,GL-WINNER \?CND12
|
|
CRLF
|
|
?CND12: SET 'GL-RESERVE-PTR,FALSE-VALUE
|
|
SET 'GL-P-CONT,FALSE-VALUE
|
|
JUMP ?CND9
|
|
?CCL11: ZERO? GL-P-CONT /?CCL17
|
|
SET 'PTR,GL-P-CONT
|
|
SET 'GL-P-CONT,FALSE-VALUE
|
|
ZERO? GL-DESC-LEVEL /?CND9
|
|
EQUAL? CH-PLAYER,GL-WINNER \?CND9
|
|
CRLF
|
|
JUMP ?CND9
|
|
?CCL17: SET 'GL-WINNER,CH-PLAYER
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
ICALL1 RT-SET-GL-PLACE-CUR
|
|
CALL1 RT-IS-LIT? >GL-NOW-LIT?
|
|
GET 0,8
|
|
BTST STACK,4 \?CND22
|
|
GET 0,8
|
|
BAND STACK,-5
|
|
PUT 0,8,STACK
|
|
ICALL1 RT-INIT-SCREEN
|
|
?CND22: ICALL1 RT-UPDATE-STATUS-LINE
|
|
ZERO? GL-WHERE-TO-PROMPT? /?CND24
|
|
CRLF
|
|
PRINTI """Where to, guv'nor?"""
|
|
CRLF
|
|
?CND24: ZERO? GL-WHERE-TO-ORPH? /?CND26
|
|
SET 'GL-WINNER,CH-PLAYER
|
|
ICALL RT-ORPHAN-VERB,W?DRIVE,ACT?DRIVE
|
|
?CND26: CRLF
|
|
PRINTC 62
|
|
PUTB GL-P-P-LEX,0,59
|
|
PUTB GL-P-PIBUF,1,0
|
|
READ GL-P-PIBUF,GL-P-P-LEX
|
|
?CND9: GETB GL-P-P-LEX,K-P-LEXWORDS >GL-P-LEN
|
|
GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?QUOTE,W?PERIOD,W?THEN /?CCL29
|
|
GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?PLEASE,W?SO \?CND28
|
|
?CCL29: ADD PTR,K-P-LEXELEN >PTR
|
|
DEC 'GL-P-LEN
|
|
?CND28: GET GL-P-P-LEX,PTR >TMP1
|
|
LESS? 1,GL-P-LEN \?CND32
|
|
GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?GO \?CND32
|
|
ADD PTR,K-P-LEXELEN
|
|
GET GL-P-P-LEX,STACK >NW
|
|
ZERO? NW /?CND32
|
|
GETB NW,6
|
|
BTST STACK,64 \?CND32
|
|
ADD PTR,K-P-LEXELEN >PTR
|
|
DEC 'GL-P-LEN
|
|
?CND32: ZERO? GL-P-LEN \?CND38
|
|
PRINTI "[What?]"
|
|
CRLF
|
|
RFALSE
|
|
?CND38: GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?UNDO \?CCL42
|
|
ICALL1 V-UNDO
|
|
RFALSE
|
|
?CCL42: ISAVE >GL-CAN-UNDO
|
|
EQUAL? GL-CAN-UNDO,2 \?CND40
|
|
ICALL1 V-REFRESH
|
|
SET 'SOUND-QUEUED?,FALSE-VALUE
|
|
ZERO? SOUND-ON? /?CND45
|
|
ICALL1 CHECK-LOOPING
|
|
?CND45: PRINTI "[UNDO completed.]"
|
|
CRLF
|
|
JUMP ?FCN
|
|
?CND40: GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?OOPS,W?O \?CCL49
|
|
ADD PTR,K-P-LEXELEN
|
|
GET GL-P-P-LEX,STACK
|
|
EQUAL? STACK,W?PERIOD,W?COMMA \?CND50
|
|
ADD PTR,K-P-LEXELEN >PTR
|
|
DEC 'GL-P-LEN
|
|
?CND50: GRTR? GL-P-LEN,1 /?CCL54
|
|
PRINTI "[You cannot use OOPS that way.]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL54: GET GL-OOPS-TABLE,K-O-PTR
|
|
ZERO? STACK /?CCL56
|
|
GRTR? GL-P-LEN,2 \?CND57
|
|
PRINTI "[Only the first word after OOPS is used.]"
|
|
CRLF
|
|
?CND57: GET GL-OOPS-TABLE,K-O-PTR >?TMP1
|
|
ADD PTR,K-P-LEXELEN
|
|
GET GL-P-P-LEX,STACK
|
|
PUT GL-P-S-LEX,?TMP1,STACK
|
|
SET 'GL-WINNER,OWINNER
|
|
MUL PTR,K-P-LEXELEN
|
|
ADD STACK,6
|
|
GETB GL-P-P-LEX,STACK >?TMP2
|
|
MUL PTR,K-P-LEXELEN
|
|
ADD STACK,7
|
|
GETB GL-P-P-LEX,STACK >?TMP1
|
|
GET GL-OOPS-TABLE,K-O-PTR
|
|
MUL STACK,K-P-LEXELEN
|
|
ADD STACK,3
|
|
ICALL RT-INBUF-ADD,?TMP2,?TMP1,STACK
|
|
ICALL RT-STUFF,GL-P-P-LEX,GL-P-S-LEX
|
|
GETB GL-P-P-LEX,K-P-LEXWORDS >GL-P-LEN
|
|
GET GL-OOPS-TABLE,K-O-START >PTR
|
|
COPYT GL-OOPS-INBUF,GL-P-PIBUF,K-P-INBUF-SIZE
|
|
JUMP ?CND47
|
|
?CCL56: PUT GL-OOPS-TABLE,K-O-END,FALSE-VALUE
|
|
PRINTI "[There was no word to replace in that sentence.]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL49: PUT GL-OOPS-TABLE,K-O-END,FALSE-VALUE
|
|
?CND47: GET GL-P-P-LEX,PTR
|
|
EQUAL? STACK,W?AGAIN,W?G \?CCL61
|
|
ZERO? GL-P-ORPH \?CTR63
|
|
ZERO? GL-P-GOOD /?CTR63
|
|
GETB GL-OOPS-INBUF,1
|
|
ZERO? STACK \?CCL64
|
|
?CTR63: PRINTI "[You cannot use AGAIN that way.]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL64: GRTR? GL-P-LEN,1 \?CCL69
|
|
ADD PTR,K-P-LEXELEN
|
|
GET GL-P-P-LEX,STACK
|
|
EQUAL? STACK,W?PERIOD,W?COMMA,W?THEN /?CTR71
|
|
ADD PTR,K-P-LEXELEN
|
|
GET GL-P-P-LEX,STACK
|
|
EQUAL? STACK,W?AND \?CCL72
|
|
?CTR71: ADD PTR,4 >PTR
|
|
GETB GL-P-P-LEX,K-P-LEXWORDS
|
|
SUB STACK,2
|
|
PUTB GL-P-P-LEX,K-P-LEXWORDS,STACK
|
|
JUMP ?CND62
|
|
?CCL72: PRINT K-DONT-UNDERSTAND-MSG
|
|
CRLF
|
|
RFALSE
|
|
?CCL69: ADD PTR,K-P-LEXELEN >PTR
|
|
GETB GL-P-P-LEX,K-P-LEXWORDS
|
|
SUB STACK,1
|
|
PUTB GL-P-P-LEX,K-P-LEXWORDS,STACK
|
|
?CND62: GETB GL-P-P-LEX,K-P-LEXWORDS
|
|
GRTR? STACK,0 \?CCL77
|
|
ICALL RT-STUFF,GL-P-T-LEX,GL-P-P-LEX
|
|
COPYT GL-P-PIBUF,GL-P-RIBUF,K-P-INBUF-SIZE
|
|
SET 'GL-RESERVE-PTR,PTR
|
|
JUMP ?CND75
|
|
?CCL77: SET 'GL-RESERVE-PTR,FALSE-VALUE
|
|
?CND75: CALL2 RT-VISIBLE?,OWINNER
|
|
ZERO? STACK /?CCL80
|
|
SET 'GL-WINNER,OWINNER
|
|
SET 'GL-P-MERGED,OMERGED
|
|
COPYT GL-OOPS-INBUF,GL-P-PIBUF,K-P-INBUF-SIZE
|
|
ICALL RT-STUFF,GL-P-P-LEX,GL-P-S-LEX
|
|
SET 'CNT,-1
|
|
SET 'DIR,GL-AGAIN-DIR
|
|
COPYT GL-P-OTBL,GL-P-ITBL,20
|
|
JUMP ?CND59
|
|
?CCL80: ICALL2 RT-CTHEO-PRINT,OWINNER
|
|
ICALL2 RT-ISNT-ARENT-MSG,OWINNER
|
|
PRINTI "here anymore."
|
|
CRLF
|
|
RFALSE
|
|
?CCL61: ZERO? GL-P-ORPH \?CND81
|
|
SET 'GL-P-NUMBER,-1
|
|
?CND81: ICALL RT-STUFF,GL-P-S-LEX,GL-P-P-LEX
|
|
COPYT GL-P-PIBUF,GL-OOPS-INBUF,K-P-INBUF-SIZE
|
|
PUT GL-OOPS-TABLE,K-O-START,PTR
|
|
MUL 4,GL-P-LEN
|
|
PUT GL-OOPS-TABLE,K-O-LENGTH,STACK
|
|
GETB GL-P-P-LEX,K-P-LEXWORDS
|
|
MUL K-P-LEXELEN,STACK
|
|
ADD PTR,STACK
|
|
MUL 2,STACK >LEN
|
|
SUB LEN,1
|
|
GETB GL-P-P-LEX,STACK >?TMP1
|
|
SUB LEN,2
|
|
GETB GL-P-P-LEX,STACK
|
|
ADD ?TMP1,STACK
|
|
PUT GL-OOPS-TABLE,K-O-END,STACK
|
|
SET 'GL-RESERVE-PTR,FALSE-VALUE
|
|
SET 'LEN,GL-P-LEN
|
|
SET 'GL-P-DIR,FALSE-VALUE
|
|
SET 'GL-P-NCN,0
|
|
SET 'GL-P-GET-FLAGS,0
|
|
PUT GL-P-ITBL,K-P-VERBN,0
|
|
?PRG83: DLESS? 'GL-P-LEN,0 \?CCL87
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
JUMP ?CND59
|
|
?CCL87: GET GL-P-P-LEX,PTR >WRD
|
|
ZERO? WRD \?CTR88
|
|
CALL2 RT-NUMBER?,PTR >WRD
|
|
ZERO? WRD /?CCL89
|
|
?CTR88: ZERO? GL-P-LEN \?CCL94
|
|
SET 'NW,0
|
|
JUMP ?CND92
|
|
?CCL94: ADD PTR,K-P-LEXELEN
|
|
GET GL-P-P-LEX,STACK >NW
|
|
?CND92: EQUAL? WRD,W?TO \?CCL97
|
|
EQUAL? VERB,ACT?TELL,ACT?ASK \?CCL97
|
|
PUT GL-P-ITBL,K-P-VERB,ACT?TELL
|
|
SET 'WRD,W?QUOTE
|
|
JUMP ?CND95
|
|
?CCL97: EQUAL? WRD,W?THEN \?CCL101
|
|
GRTR? GL-P-LEN,0 \?CCL101
|
|
ZERO? VERB \?CCL101
|
|
ZERO? GL-P-QUOT \?CCL101
|
|
PUT GL-P-ITBL,K-P-VERB,ACT?TELL
|
|
PUT GL-P-ITBL,K-P-VERBN,0
|
|
SET 'WRD,W?QUOTE
|
|
SET 'GL-P-ORPH,FALSE-VALUE
|
|
JUMP ?CND95
|
|
?CCL101: EQUAL? WRD,W?PERIOD \?CND95
|
|
EQUAL? LW,W?MR,W?MRS,W?MISS /?CCL106
|
|
EQUAL? LW,W?DR \?CND95
|
|
?CCL106: DEC 'GL-P-NCN
|
|
ICALL RT-CHANGE-LEXV,PTR,LW,TRUE-VALUE
|
|
SET 'WRD,LW
|
|
SET 'LW,0
|
|
?CND95: EQUAL? WRD,W?THEN,W?PERIOD,W?QUOTE \?CCL113
|
|
EQUAL? WRD,W?QUOTE \?CND114
|
|
ZERO? GL-P-QUOT /?CCL118
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
JUMP ?CND114
|
|
?CCL118: SET 'GL-P-QUOT,TRUE-VALUE
|
|
?CND114: ZERO? GL-P-LEN /?PEN119
|
|
ADD PTR,K-P-LEXELEN >GL-P-CONT
|
|
?PEN119: PUTB GL-P-P-LEX,K-P-LEXWORDS,GL-P-LEN
|
|
JUMP ?CND59
|
|
?CCL113: CALL RT-WT?,WRD,16,3 >VAL
|
|
ZERO? VAL /?CCL122
|
|
EQUAL? VERB,FALSE-VALUE,ACT?WALK,ACT?GO \?CCL122
|
|
EQUAL? LEN,1 /?CTR121
|
|
EQUAL? LEN,2 \?PRD128
|
|
EQUAL? VERB,ACT?WALK,ACT?GO /?CTR121
|
|
?PRD128: EQUAL? NW,W?THEN,W?PERIOD,W?QUOTE \?PRD131
|
|
GRTR? LEN,1 /?CTR121
|
|
?PRD131: ZERO? GL-P-QUOT /?PRD134
|
|
EQUAL? LEN,2 \?PRD134
|
|
EQUAL? NW,W?QUOTE /?CTR121
|
|
?PRD134: GRTR? LEN,2 \?CCL122
|
|
EQUAL? NW,W?COMMA,W?AND \?CCL122
|
|
?CTR121: SET 'DIR,VAL
|
|
SET 'GL-P-DIR-WORD,WRD
|
|
EQUAL? NW,W?COMMA,W?AND \?CND140
|
|
ADD PTR,K-P-LEXELEN
|
|
ICALL RT-CHANGE-LEXV,STACK,W?THEN
|
|
?CND140: GRTR? LEN,2 /?CND85
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
JUMP ?CND59
|
|
?CCL122: CALL RT-WT?,WRD,64,1 >VAL
|
|
ZERO? VAL /?CCL145
|
|
ZERO? VERB \?CCL145
|
|
SET 'GL-P-PRSA-WORD,WRD
|
|
SET 'VERB,VAL
|
|
PUT GL-P-ITBL,K-P-VERB,VAL
|
|
PUT GL-P-ITBL,K-P-VERBN,GL-P-VTBL
|
|
PUT GL-P-VTBL,0,WRD
|
|
MUL PTR,2
|
|
ADD STACK,2 >TMP1
|
|
GETB GL-P-P-LEX,TMP1
|
|
PUTB GL-P-VTBL,2,STACK
|
|
ADD TMP1,1
|
|
GETB GL-P-P-LEX,STACK
|
|
PUTB GL-P-VTBL,3,STACK
|
|
JUMP ?CND85
|
|
?CCL145: CALL RT-WT?,WRD,8,0 >VAL
|
|
ZERO? VAL \?CTR148
|
|
EQUAL? WRD,W?A,W?EVERYTHING /?CTR148
|
|
EQUAL? WRD,W?BOTH,W?ALL /?CTR148
|
|
GETB WRD,6
|
|
BAND STACK,160
|
|
ZERO? STACK /?CCL149
|
|
?CTR148: GRTR? GL-P-LEN,1 \?CCL156
|
|
EQUAL? NW,W?OF \?CCL156
|
|
EQUAL? VERB,ACT?TAKE /?CCL156
|
|
ZERO? VAL \?CCL156
|
|
EQUAL? WRD,W?A /?CCL156
|
|
EQUAL? WRD,W?ALL,W?BOTH,W?EVERYTHING /?CCL156
|
|
PUT GL-P-OFW,GL-P-NCN,WRD
|
|
SET 'OF-FLAG,TRUE-VALUE
|
|
JUMP ?CND85
|
|
?CCL156: ZERO? VAL /?CCL164
|
|
ZERO? GL-P-LEN /?CTR163
|
|
EQUAL? NW,W?THEN,W?PERIOD \?CCL164
|
|
?CTR163: SET 'GL-P-END-ON-PREP,TRUE-VALUE
|
|
LESS? GL-P-NCN,2 \?CND85
|
|
PUT GL-P-ITBL,K-P-PREP1,VAL
|
|
PUT GL-P-ITBL,K-P-PREP1N,WRD
|
|
JUMP ?CND85
|
|
?CCL164: EQUAL? GL-P-NCN,2 \?CCL172
|
|
PRINTI "[There are too many nouns in that sentence.]"
|
|
CRLF
|
|
RFALSE
|
|
?CCL172: INC 'GL-P-NCN
|
|
CALL RT-CLAUSE,PTR,VAL,WRD >PTR
|
|
ZERO? PTR /FALSE
|
|
LESS? PTR,0 \?CND85
|
|
SET 'GL-P-QUOT,FALSE-VALUE
|
|
?CND59: PUT GL-OOPS-TABLE,K-O-PTR,FALSE-VALUE
|
|
ZERO? DIR /?CND191
|
|
SET 'GL-PRSA,V?WALK
|
|
SET 'GL-P-WALK-DIR,DIR
|
|
SET 'GL-AGAIN-DIR,DIR
|
|
SET 'GL-PRSO,DIR
|
|
SET 'GL-P-ORPH,FALSE-VALUE
|
|
RTRUE
|
|
?CCL149: EQUAL? WRD,W?OF \?CCL178
|
|
ZERO? OF-FLAG /?CTR180
|
|
EQUAL? NW,W?PERIOD,W?THEN \?CCL181
|
|
?CTR180: ICALL2 RT-DONT-KNOW-WORD-USE-MSG,PTR
|
|
RFALSE
|
|
?CCL181: SET 'OF-FLAG,FALSE-VALUE
|
|
JUMP ?CND85
|
|
?CCL178: GETB WRD,6
|
|
BTST STACK,4 /?CND85
|
|
EQUAL? WRD,W?MARX /?CND85
|
|
EQUAL? VERB,ACT?TELL \?CCL188
|
|
GETB WRD,6
|
|
BTST STACK,64 \?CCL188
|
|
ICALL1 RT-WAY-TO-TALK-MSG
|
|
RFALSE
|
|
?CCL188: ICALL2 RT-DONT-KNOW-WORD-USE-MSG,PTR
|
|
RFALSE
|
|
?CCL89: ICALL2 RT-DONT-KNOW-WORD-MSG,PTR
|
|
RFALSE
|
|
?CND85: SET 'LW,WRD
|
|
ADD PTR,K-P-LEXELEN >PTR
|
|
JUMP ?PRG83
|
|
?CND191: SET 'GL-P-WALK-DIR,FALSE-VALUE
|
|
SET 'GL-AGAIN-DIR,FALSE-VALUE
|
|
ZERO? GL-P-ORPH /?CND193
|
|
CALL1 RT-ORPHAN-MERGE
|
|
ZERO? STACK /?CND193
|
|
ZERO? GL-WHERE-TO-ORPH? \?CND193
|
|
SET 'GL-WINNER,OWINNER
|
|
?CND193: CALL1 RT-SYNTAX-CHECK
|
|
ZERO? STACK /FALSE
|
|
CALL1 RT-SNARF-OBJECTS
|
|
ZERO? STACK /FALSE
|
|
CALL1 RT-MANY-CHECK
|
|
ZERO? STACK /FALSE
|
|
GETB GL-P-SYNTAX,0
|
|
SHIFT STACK,-6 >TMP1
|
|
GRTR? TMP1,0 \TRUE
|
|
GETB GL-P-SYNTAX,K-P-SLOC1
|
|
CALL RT-ITAKE-CHECK,GL-P-PRSO,STACK,TRUE-VALUE
|
|
ZERO? STACK /FALSE
|
|
GRTR? TMP1,1 \TRUE
|
|
GETB GL-P-SYNTAX,K-P-SLOC2
|
|
CALL RT-ITAKE-CHECK,GL-P-PRSI,STACK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT RT-WHICH-PRINT,TLEN,LEN,TBL,OBJ,RLEN
|
|
SET 'RLEN,LEN
|
|
PRINTI "Which"
|
|
ZERO? GL-P-ORPH \?CTR2
|
|
ZERO? GL-P-MERGED \?CTR2
|
|
ZERO? GL-P-AND /?CCL3
|
|
?CTR2: PRINTC 32
|
|
PRINTB GL-P-NAM
|
|
JUMP ?CND1
|
|
?CCL3: EQUAL? TBL,GL-P-PRSO \?CCL8
|
|
ICALL RT-CLAUSE-PRINT,K-P-NC1,K-P-NC1L,FALSE-VALUE
|
|
JUMP ?CND1
|
|
?CCL8: ICALL RT-CLAUSE-PRINT,K-P-NC2,K-P-NC2L,FALSE-VALUE
|
|
?CND1: PRINTI " do you mean,"
|
|
?PRG9: INC 'TLEN
|
|
GET TBL,TLEN >OBJ
|
|
PRINTC 32
|
|
ICALL2 RT-THEO-PRINT,OBJ
|
|
EQUAL? LEN,2 \?CCL13
|
|
EQUAL? RLEN,2 /?CND14
|
|
PRINTC 44
|
|
?CND14: PRINTI " or"
|
|
JUMP ?CND11
|
|
?CCL13: GRTR? LEN,2 \?CND11
|
|
PRINTC 44
|
|
?CND11: DLESS? 'LEN,1 \?PRG9
|
|
PRINTR "?"
|
|
|
|
|
|
.FUNCT RT-FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ
|
|
CALL2 RT-MOBY-FIND,TBL >M-F
|
|
ZERO? M-F \?CCL3
|
|
PRINTI "[There is no"
|
|
ICALL2 RT-NOT-HERE-PRINT,PRSO?
|
|
PRINTR " in this story.]"
|
|
?CCL3: EQUAL? M-F,1 \?CCL5
|
|
ZERO? PRSO? /?CCL8
|
|
SET 'GL-PRSO,GL-P-MOBY-FOUND
|
|
RFALSE
|
|
?CCL8: SET 'GL-PRSI,GL-P-MOBY-FOUND
|
|
RFALSE
|
|
?CCL5: GRTR? M-F,1 \?CCL10
|
|
GET TBL,1 >OBJ
|
|
GETP OBJ,P?GENERIC
|
|
CALL STACK,TBL >OBJ
|
|
ZERO? OBJ /?CCL10
|
|
EQUAL? OBJ,TH-NOT-HERE-OBJECT /TRUE
|
|
ZERO? PRSO? /?CCL17
|
|
SET 'GL-PRSO,OBJ
|
|
RFALSE
|
|
?CCL17: SET 'GL-PRSI,OBJ
|
|
RFALSE
|
|
?CCL10: EQUAL? GL-PRSA,V?ASK-ABOUT,V?TELL-ABOUT,V?ASK-FOR /FALSE
|
|
EQUAL? GL-PRSA,V?SAY,V?DRIVE,V?CALL /FALSE
|
|
EQUAL? GL-PRSA,V?MAKE,V?WHO,V?WHAT /FALSE
|
|
EQUAL? GL-PRSA,V?WHERE,V?FIND,V?FOLLOW /FALSE
|
|
EQUAL? GL-PRSA,V?TELL,V?PASSWORD /FALSE
|
|
ZERO? PRSO? \?CCL26
|
|
ICALL1 RT-CYOU-MSG
|
|
PRINTI "would not find any"
|
|
ICALL2 RT-NOT-HERE-PRINT,PRSO?
|
|
PRINTR " there."
|
|
?CCL26: RETURN TH-NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT RT-NOT-HERE-PRINT,PRSO?,?TMP1
|
|
ZERO? GL-P-ORPH \?CTR2
|
|
ZERO? GL-P-MERGED /?CCL3
|
|
?CTR2: ZERO? GL-P-XADJ /?CND6
|
|
PRINTC 32
|
|
PRINTB GL-P-XADJ
|
|
?CND6: ZERO? GL-P-XNAM /FALSE
|
|
PRINTC 32
|
|
PRINTB GL-P-XNAM
|
|
RTRUE
|
|
?CCL3: ZERO? PRSO? /?CCL12
|
|
GET GL-P-ITBL,K-P-NC1 >?TMP1
|
|
GET GL-P-ITBL,K-P-NC1L
|
|
CALL RT-BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
|
|
RSTACK
|
|
?CCL12: GET GL-P-ITBL,K-P-NC2 >?TMP1
|
|
GET GL-P-ITBL,K-P-NC2L
|
|
CALL RT-BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
|
|
RSTACK
|
|
|
|
.ENDI
|