mirror of
https://github.com/historicalsource/plunderedhearts
synced 2024-06-28 20:55:11 +03:00
1872 lines
39 KiB
Plaintext
1872 lines
39 KiB
Plaintext
|
|
||
|
|
||
|
.FUNCT THIS-IS-IT,OBJ
|
||
|
ZERO? OBJ /TRUE
|
||
|
EQUAL? PRSA,V?WALK \?PRD6
|
||
|
EQUAL? PRSO,OBJ /TRUE
|
||
|
?PRD6: EQUAL? OBJ,PROTAGONIST /TRUE
|
||
|
EQUAL? OBJ,NOT-HERE-OBJECT,ME,GLOBAL-ROOM /TRUE
|
||
|
FSET? OBJ,FEMALEBIT \?CCL11
|
||
|
SET 'P-HER-OBJECT,OBJ
|
||
|
RETURN P-HER-OBJECT
|
||
|
?CCL11: FSET? OBJ,ACTORBIT \?CCL13
|
||
|
SET 'P-HIM-OBJECT,OBJ
|
||
|
RETURN P-HIM-OBJECT
|
||
|
?CCL13: SET 'P-IT-OBJECT,OBJ
|
||
|
RETURN P-IT-OBJECT
|
||
|
|
||
|
|
||
|
.FUNCT OOPS-WARNING,STR
|
||
|
PRINTI "[Warning: there are too many "
|
||
|
PRINT STR
|
||
|
PRINTR " after OOPS.]"
|
||
|
|
||
|
|
||
|
.FUNCT PARSER,PTR=P-LEXSTART,WRD,VAL=0,VERB=0,OMERGED,OWINNER,OLEN,LEN,DIR=0,NW=0,LW=0,CNT=-1,?TMP2,?TMP1
|
||
|
?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 'OMERGED,P-MERGED
|
||
|
SET 'OWINNER,WINNER
|
||
|
SET 'P-ADVERB,FALSE-VALUE
|
||
|
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
|
||
|
ZERO? QUOTE-FLAG \?CND8
|
||
|
EQUAL? WINNER,PROTAGONIST /?CND8
|
||
|
SET 'WINNER,PROTAGONIST
|
||
|
LOC WINNER
|
||
|
FSET? STACK,VEHBIT /?CND12
|
||
|
LOC WINNER >HERE
|
||
|
?CND12: CALL LIT?,HERE >LIT
|
||
|
?CND8: ZERO? RESERVE-PTR /?CCL16
|
||
|
SET 'PTR,RESERVE-PTR
|
||
|
CALL STUFF,P-LEXV,RESERVE-LEXV
|
||
|
CALL INBUF-STUFF,P-INBUF,RESERVE-INBUF
|
||
|
ZERO? VERBOSITY /?CND17
|
||
|
EQUAL? PROTAGONIST,WINNER \?CND17
|
||
|
CRLF
|
||
|
?CND17: SET 'RESERVE-PTR,FALSE-VALUE
|
||
|
SET 'P-CONT,FALSE-VALUE
|
||
|
JUMP ?CND14
|
||
|
?CCL16: ZERO? P-CONT /?CCL22
|
||
|
SET 'PTR,P-CONT
|
||
|
ZERO? VERBOSITY /?CND23
|
||
|
EQUAL? PROTAGONIST,WINNER \?CND23
|
||
|
CRLF
|
||
|
?CND23: SET 'P-CONT,FALSE-VALUE
|
||
|
JUMP ?CND14
|
||
|
?CCL22: SET 'WINNER,PROTAGONIST
|
||
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
||
|
LOC WINNER
|
||
|
FSET? STACK,VEHBIT /?CND27
|
||
|
LOC WINNER >HERE
|
||
|
?CND27: CALL LIT?,HERE >LIT
|
||
|
ZERO? VERBOSITY /?CND29
|
||
|
CRLF
|
||
|
?CND29: PRINTC 62
|
||
|
READ P-INBUF,P-LEXV
|
||
|
GETB P-LEXV,P-LEXWORDS >OLEN
|
||
|
?CND14: GETB P-LEXV,P-LEXWORDS >P-LEN
|
||
|
ZERO? P-LEN \?CCL33
|
||
|
PRINTI "[Prithee, pardon?]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL33: GET P-LEXV,PTR
|
||
|
EQUAL? STACK,W?OOPS \?CCL35
|
||
|
ADD PTR,P-LEXELEN
|
||
|
GET P-LEXV,STACK
|
||
|
EQUAL? STACK,W?PERIOD,W?COMMA \?CND36
|
||
|
ADD PTR,P-LEXELEN >PTR
|
||
|
DEC 'P-LEN
|
||
|
?CND36: GRTR? P-LEN,1 /?CCL40
|
||
|
CALL CANT-USE-THAT-WAY,STR?238
|
||
|
RFALSE
|
||
|
?CCL40: GET OOPS-TABLE,O-PTR >VAL
|
||
|
ZERO? VAL /?CCL42
|
||
|
GETB AGAIN-LEXV,0
|
||
|
MUL 2,STACK >LEN
|
||
|
SUB P-LEN,2 >CNT
|
||
|
MUL P-LEXELEN,CNT
|
||
|
ADD VAL,STACK
|
||
|
LESS? LEN,STACK \?CND43
|
||
|
SUB LEN,VAL
|
||
|
DIV STACK,P-LEXELEN >CNT
|
||
|
CALL OOPS-WARNING,STR?239
|
||
|
?CND43: ZERO? CNT /?CND45
|
||
|
GETB AGAIN-LEXV,P-LEXWORDS >LEN
|
||
|
ADD LEN,CNT
|
||
|
PUTB AGAIN-LEXV,P-LEXWORDS,STACK
|
||
|
MUL P-LEXELEN,CNT >CNT
|
||
|
MUL P-LEXELEN,LEN >LEN
|
||
|
?PRG47: ADD CNT,LEN >?TMP1
|
||
|
GET AGAIN-LEXV,LEN
|
||
|
PUT AGAIN-LEXV,?TMP1,STACK
|
||
|
DLESS? 'LEN,VAL \?PRG47
|
||
|
?CND45: SET 'CNT,P-LEN
|
||
|
?PRG51: DLESS? 'CNT,1 /?REP52
|
||
|
ADD PTR,P-LEXELEN >PTR
|
||
|
GET P-LEXV,PTR
|
||
|
PUT AGAIN-LEXV,VAL,STACK
|
||
|
MUL PTR,P-LEXELEN
|
||
|
ADD STACK,2 >WRD
|
||
|
GETB P-LEXV,WRD >?TMP2
|
||
|
ADD WRD,1
|
||
|
GETB P-LEXV,STACK >?TMP1
|
||
|
MUL VAL,P-LEXELEN
|
||
|
ADD STACK,3
|
||
|
CALL INBUF-ADD,?TMP2,?TMP1,STACK
|
||
|
ZERO? STACK \?CND55
|
||
|
CALL OOPS-WARNING,STR?240
|
||
|
?REP52: SET 'WINNER,OWINNER
|
||
|
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
|
||
|
JUMP ?CND31
|
||
|
?CND55: ADD VAL,P-LEXELEN >VAL
|
||
|
JUMP ?PRG51
|
||
|
?CCL42: PUT OOPS-TABLE,O-END,FALSE-VALUE
|
||
|
PRINTI "[There was no word to replace!]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL35: PUT OOPS-TABLE,O-END,FALSE-VALUE
|
||
|
?CND31: GET P-LEXV,PTR
|
||
|
EQUAL? STACK,W?AGAIN,W?G \?CCL59
|
||
|
ZERO? P-OFLAG /?CCL62
|
||
|
CALL CANT-USE-THAT-WAY,STR?241
|
||
|
RFALSE
|
||
|
?CCL62: ZERO? P-WON \?CCL64
|
||
|
PRINTI "[That would just repeat a mistake!]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL64: EQUAL? OWINNER,PROTAGONIST /?CCL66
|
||
|
CALL VISIBLE?,OWINNER
|
||
|
ZERO? STACK \?CCL66
|
||
|
PRINTC 91
|
||
|
PRINT YOU-CANT
|
||
|
PRINTI "see "
|
||
|
PRINTD OWINNER
|
||
|
PRINTI " any more.]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL66: GRTR? P-LEN,1 \?CCL70
|
||
|
ADD PTR,P-LEXELEN
|
||
|
GET P-LEXV,STACK
|
||
|
EQUAL? STACK,W?PERIOD,W?COMMA,W?THEN /?CTR72
|
||
|
ADD PTR,P-LEXELEN
|
||
|
GET P-LEXV,STACK
|
||
|
EQUAL? STACK,W?AND \?CCL73
|
||
|
?CTR72: ADD PTR,4 >PTR
|
||
|
GETB P-LEXV,P-LEXWORDS
|
||
|
SUB STACK,2
|
||
|
PUTB P-LEXV,P-LEXWORDS,STACK
|
||
|
JUMP ?CND60
|
||
|
?CCL73: CALL RECOGNIZE
|
||
|
RFALSE
|
||
|
?CCL70: ADD PTR,P-LEXELEN >PTR
|
||
|
GETB P-LEXV,P-LEXWORDS
|
||
|
SUB STACK,1
|
||
|
PUTB P-LEXV,P-LEXWORDS,STACK
|
||
|
?CND60: GETB P-LEXV,P-LEXWORDS
|
||
|
GRTR? STACK,0 \?CCL78
|
||
|
CALL STUFF,RESERVE-LEXV,P-LEXV
|
||
|
CALL INBUF-STUFF,RESERVE-INBUF,P-INBUF
|
||
|
SET 'RESERVE-PTR,PTR
|
||
|
JUMP ?CND76
|
||
|
?CCL78: SET 'RESERVE-PTR,FALSE-VALUE
|
||
|
?CND76: 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
|
||
|
?PRG79: IGRTR? 'CNT,P-ITBLLEN /?CND57
|
||
|
GET P-OTBL,CNT
|
||
|
PUT P-ITBL,CNT,STACK
|
||
|
JUMP ?PRG79
|
||
|
?CCL59: 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
|
||
|
GETB P-LEXV,P-LEXWORDS
|
||
|
MUL P-LEXELEN,STACK
|
||
|
ADD PTR,STACK
|
||
|
MUL 2,STACK >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
|
||
|
SET 'RESERVE-PTR,FALSE-VALUE
|
||
|
SET 'LEN,P-LEN
|
||
|
SET 'P-NCN,0
|
||
|
SET 'P-GETFLAGS,0
|
||
|
?PRG84: DLESS? 'P-LEN,0 \?CCL88
|
||
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
||
|
JUMP ?CND57
|
||
|
?CCL88: GET P-LEXV,PTR >WRD
|
||
|
ZERO? WRD \?CTR89
|
||
|
CALL NUMBER?,PTR >WRD
|
||
|
ZERO? WRD /?CCL90
|
||
|
?CTR89: CALL NEXT-WORD,PTR >NW
|
||
|
EQUAL? WRD,W?TO \?CCL95
|
||
|
EQUAL? VERB,ACT?TELL,ACT?ASK \?CCL95
|
||
|
CALL WT?,NW,64,1
|
||
|
ZERO? STACK /?CCL95
|
||
|
PUT P-ITBL,P-VERB,ACT?TELL
|
||
|
SET 'WRD,W?QUOTE
|
||
|
JUMP ?CND93
|
||
|
?CCL95: EQUAL? WRD,W?THEN \?CCL100
|
||
|
GRTR? P-LEN,0 \?CCL100
|
||
|
ZERO? VERB \?CCL100
|
||
|
ZERO? QUOTE-FLAG \?CCL100
|
||
|
PUT P-ITBL,P-VERB,ACT?TELL
|
||
|
PUT P-ITBL,P-VERBN,0
|
||
|
SET 'WRD,W?QUOTE
|
||
|
JUMP ?CND93
|
||
|
?CCL100: EQUAL? WRD,W?PERIOD \?CND93
|
||
|
EQUAL? LW,W?ST \?CND93
|
||
|
DEC 'P-NCN
|
||
|
CALL CHANGE-LEXV,PTR,LW,TRUE-VALUE
|
||
|
SET 'WRD,LW
|
||
|
SET 'LW,0
|
||
|
?CND93: EQUAL? WRD,W?THEN,W?PERIOD /?CTR109
|
||
|
EQUAL? WRD,W?QUOTE \?CCL110
|
||
|
?CTR109: EQUAL? WRD,W?QUOTE \?CND113
|
||
|
ZERO? QUOTE-FLAG /?CCL117
|
||
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
||
|
JUMP ?CND113
|
||
|
?CCL117: SET 'QUOTE-FLAG,TRUE-VALUE
|
||
|
?CND113: ZERO? P-LEN /?PEN118
|
||
|
ADD PTR,P-LEXELEN >P-CONT
|
||
|
?PEN118: PUTB P-LEXV,P-LEXWORDS,P-LEN
|
||
|
JUMP ?CND57
|
||
|
?CCL110: CALL WT?,WRD,16,3 >VAL
|
||
|
ZERO? VAL /?CCL121
|
||
|
EQUAL? VERB,FALSE-VALUE,ACT?WALK,ACT?GO \?CCL121
|
||
|
EQUAL? LEN,1 /?CTR120
|
||
|
EQUAL? LEN,2 \?PRD127
|
||
|
EQUAL? VERB,ACT?WALK,ACT?GO /?CTR120
|
||
|
?PRD127: EQUAL? NW,W?THEN,W?PERIOD,W?QUOTE \?PRD130
|
||
|
LESS? LEN,2 \?CTR120
|
||
|
?PRD130: ZERO? QUOTE-FLAG /?PRD133
|
||
|
EQUAL? LEN,2 \?PRD133
|
||
|
EQUAL? NW,W?QUOTE /?CTR120
|
||
|
?PRD133: GRTR? LEN,2 \?CCL121
|
||
|
EQUAL? NW,W?COMMA,W?AND \?CCL121
|
||
|
?CTR120: SET 'DIR,VAL
|
||
|
EQUAL? NW,W?COMMA,W?AND \?CND139
|
||
|
ADD PTR,P-LEXELEN
|
||
|
CALL CHANGE-LEXV,STACK,W?THEN
|
||
|
?CND139: GRTR? LEN,2 /?CND86
|
||
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
||
|
JUMP ?CND57
|
||
|
?CCL121: CALL WT?,WRD,64,1 >VAL
|
||
|
ZERO? VAL /?CCL144
|
||
|
ZERO? VERB \?CCL144
|
||
|
SET 'P-PRSA-WORD,WRD
|
||
|
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 >CNT
|
||
|
GETB P-LEXV,CNT
|
||
|
PUTB P-VTBL,2,STACK
|
||
|
ADD CNT,1
|
||
|
GETB P-LEXV,STACK
|
||
|
PUTB P-VTBL,3,STACK
|
||
|
JUMP ?CND86
|
||
|
?CCL144: CALL WT?,WRD,8,0 >VAL
|
||
|
ZERO? VAL \?CTR147
|
||
|
EQUAL? WRD,W?ALL,W?ONE,W?BOTH /?CTR147
|
||
|
EQUAL? WRD,W?EVERYT /?CTR147
|
||
|
CALL WT?,WRD,32
|
||
|
ZERO? STACK \?CTR147
|
||
|
CALL WT?,WRD,128
|
||
|
ZERO? STACK /?CCL148
|
||
|
?CTR147: GRTR? P-LEN,0 \?CCL155
|
||
|
EQUAL? NW,W?OF \?CCL155
|
||
|
ZERO? VAL \?CCL155
|
||
|
EQUAL? WRD,W?ALL,W?ONE,W?A /?CCL155
|
||
|
EQUAL? WRD,W?BOTH,W?EVERYT \?CND86
|
||
|
?CCL155: ZERO? VAL /?CCL162
|
||
|
ZERO? P-LEN /?CTR161
|
||
|
EQUAL? NW,W?THEN,W?PERIOD \?CCL162
|
||
|
?CTR161: SET 'P-END-ON-PREP,TRUE-VALUE
|
||
|
LESS? P-NCN,2 \?CND86
|
||
|
PUT P-ITBL,P-PREP1,VAL
|
||
|
PUT P-ITBL,P-PREP1N,WRD
|
||
|
JUMP ?CND86
|
||
|
?CCL162: EQUAL? P-NCN,2 \?CCL170
|
||
|
PRINTI "[There were too many nouns in that sentence.]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL170: INC 'P-NCN
|
||
|
CALL CLAUSE,PTR,VAL,WRD >PTR
|
||
|
ZERO? PTR /FALSE
|
||
|
LESS? PTR,0 \?CND86
|
||
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
||
|
?CND57: PUT OOPS-TABLE,O-PTR,FALSE-VALUE
|
||
|
ZERO? DIR /?CND181
|
||
|
SET 'PRSA,V?WALK
|
||
|
SET 'P-PRSA-WORD,FALSE-VALUE
|
||
|
SET 'PRSO,DIR
|
||
|
SET 'P-OFLAG,FALSE-VALUE
|
||
|
SET 'P-WALK-DIR,DIR
|
||
|
SET 'AGAIN-DIR,DIR
|
||
|
RTRUE
|
||
|
?CCL148: CALL WT?,WRD,4
|
||
|
ZERO? STACK \?CND86
|
||
|
EQUAL? VERB,ACT?TELL \?CCL177
|
||
|
CALL WT?,WRD,64,1
|
||
|
ZERO? STACK /?CCL177
|
||
|
EQUAL? WINNER,PROTAGONIST \?CCL177
|
||
|
CALL SEE-MANUAL,STR?242
|
||
|
RFALSE
|
||
|
?CCL177: CALL CANT-USE,PTR
|
||
|
RFALSE
|
||
|
?CCL90: CALL UNKNOWN-WORD,PTR
|
||
|
RFALSE
|
||
|
?CND86: SET 'LW,WRD
|
||
|
ADD PTR,P-LEXELEN >PTR
|
||
|
JUMP ?PRG84
|
||
|
?CND181: SET 'P-WALK-DIR,FALSE-VALUE
|
||
|
SET 'AGAIN-DIR,FALSE-VALUE
|
||
|
ZERO? P-OFLAG /?CND183
|
||
|
CALL ORPHAN-MERGE
|
||
|
?CND183: 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,PTRS?=0,X,Y,Z
|
||
|
ZERO? PTRS? /?CND1
|
||
|
SUB PTR,P-LEXELEN
|
||
|
MUL 2,STACK
|
||
|
ADD 2,STACK >X
|
||
|
GETB P-LEXV,X >Y
|
||
|
MUL 2,PTR
|
||
|
ADD 2,STACK >Z
|
||
|
PUTB P-LEXV,Z,Y
|
||
|
PUTB AGAIN-LEXV,Z,Y
|
||
|
ADD 1,X
|
||
|
GETB P-LEXV,STACK >Y
|
||
|
MUL 2,PTR
|
||
|
ADD 3,STACK >Z
|
||
|
PUTB P-LEXV,Z,Y
|
||
|
PUTB AGAIN-LEXV,Z,Y
|
||
|
?CND1: PUT P-LEXV,PTR,WRD
|
||
|
PUT AGAIN-LEXV,PTR,WRD
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.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=-1
|
||
|
?PRG1: IGRTR? 'CNT,P-INBUF-LENGTH /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 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 NEXT-WORD,PTR,NW
|
||
|
ZERO? P-LEN /FALSE
|
||
|
ADD PTR,P-LEXELEN
|
||
|
GET P-LEXV,STACK >NW
|
||
|
ZERO? NW /?CCL6
|
||
|
RETURN NW
|
||
|
?CCL6: ADD PTR,P-LEXELEN
|
||
|
CALL NUMBER?,STACK
|
||
|
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
|
||
|
?PRG6: DLESS? 'P-LEN,0 \?CND8
|
||
|
ADD NUM,1 >?TMP1
|
||
|
MUL PTR,2
|
||
|
ADD P-LEXV,STACK
|
||
|
PUT P-ITBL,?TMP1,STACK
|
||
|
RETURN -1
|
||
|
?CND8: GET P-LEXV,PTR >WRD
|
||
|
ZERO? WRD \?CTR11
|
||
|
CALL NUMBER?,PTR >WRD
|
||
|
ZERO? WRD /?CCL12
|
||
|
?CTR11: CALL NEXT-WORD,PTR >NW
|
||
|
ZERO? FIRST?? /?CCL17
|
||
|
EQUAL? WRD,W?THE,W?A,W?AN /?CTR16
|
||
|
ZERO? VAL /?CCL17
|
||
|
CALL WT?,WRD,8
|
||
|
ZERO? STACK /?CCL17
|
||
|
CALL WT?,WRD,32
|
||
|
ZERO? STACK \?CCL17
|
||
|
?CTR16: GET P-ITBL,NUM
|
||
|
ADD STACK,4
|
||
|
PUT P-ITBL,NUM,STACK
|
||
|
JUMP ?CND10
|
||
|
?CCL17: EQUAL? WRD,W?PERIOD \?CCL26
|
||
|
EQUAL? LW,W?ST \?CCL26
|
||
|
SET 'LW,0
|
||
|
JUMP ?CND10
|
||
|
?CCL26: EQUAL? WRD,W?AND,W?COMMA \?CCL30
|
||
|
SET 'ANDFLG,TRUE-VALUE
|
||
|
JUMP ?CND10
|
||
|
?CCL30: EQUAL? WRD,W?ALL,W?ONE,W?BOTH /?CTR31
|
||
|
EQUAL? WRD,W?EVERYT \?CCL32
|
||
|
?CTR31: EQUAL? NW,W?OF \?CND10
|
||
|
DEC 'P-LEN
|
||
|
ADD PTR,P-LEXELEN >PTR
|
||
|
JUMP ?CND10
|
||
|
?CCL32: EQUAL? WRD,W?THEN,W?PERIOD /?CTR37
|
||
|
CALL WT?,WRD,8
|
||
|
ZERO? STACK /?CCL38
|
||
|
GET P-ITBL,P-VERB
|
||
|
ZERO? STACK /?CCL38
|
||
|
ZERO? FIRST?? \?CCL38
|
||
|
?CTR37: INC 'P-LEN
|
||
|
ADD NUM,1 >?TMP1
|
||
|
MUL PTR,2
|
||
|
ADD P-LEXV,STACK
|
||
|
PUT P-ITBL,?TMP1,STACK
|
||
|
SUB PTR,P-LEXELEN
|
||
|
RSTACK
|
||
|
?CCL38: ZERO? ANDFLG /?CCL45
|
||
|
GET P-ITBL,P-VERB
|
||
|
ZERO? STACK \?CCL45
|
||
|
SUB PTR,4 >PTR
|
||
|
ADD PTR,2
|
||
|
CALL CHANGE-LEXV,STACK,W?THEN
|
||
|
ADD P-LEN,2 >P-LEN
|
||
|
JUMP ?CND10
|
||
|
?CCL45: CALL WT?,WRD,128
|
||
|
ZERO? STACK /?CCL49
|
||
|
GRTR? P-LEN,0 \?CCL52
|
||
|
EQUAL? NW,W?OF \?CCL52
|
||
|
EQUAL? WRD,W?ALL,W?EVERYT,W?ONE \?CND10
|
||
|
?CCL52: CALL WT?,WRD,32
|
||
|
ZERO? STACK /?CCL57
|
||
|
ZERO? NW /?CCL57
|
||
|
CALL WT?,NW,128
|
||
|
ZERO? STACK \?CND10
|
||
|
CALL WT?,NW,32
|
||
|
ZERO? STACK \?CND10
|
||
|
?CCL57: ZERO? ANDFLG \?CCL64
|
||
|
EQUAL? NW,W?BUT,W?EXCEPT /?CCL64
|
||
|
EQUAL? NW,W?AND,W?COMMA /?CCL64
|
||
|
ADD NUM,1 >?TMP1
|
||
|
ADD PTR,2
|
||
|
MUL STACK,2
|
||
|
ADD P-LEXV,STACK
|
||
|
PUT P-ITBL,?TMP1,STACK
|
||
|
RETURN PTR
|
||
|
?CCL64: SET 'ANDFLG,FALSE-VALUE
|
||
|
JUMP ?CND10
|
||
|
?CCL49: CALL WT?,WRD,32
|
||
|
ZERO? STACK \?CND10
|
||
|
CALL WT?,WRD,4
|
||
|
ZERO? STACK \?CND10
|
||
|
CALL WT?,WRD,8
|
||
|
ZERO? STACK \?CND10
|
||
|
CALL CANT-USE,PTR
|
||
|
RFALSE
|
||
|
?CCL12: CALL UNKNOWN-WORD,PTR
|
||
|
RFALSE
|
||
|
?CND10: SET 'LW,WRD
|
||
|
SET 'FIRST??,FALSE-VALUE
|
||
|
ADD PTR,P-LEXELEN >PTR
|
||
|
JUMP ?PRG6
|
||
|
|
||
|
|
||
|
.FUNCT NUMBER?,PTR,CNT,BPTR,CHR,SUM=0,CCTR,TMP,XPTR,?TMP1
|
||
|
MUL PTR,2
|
||
|
ADD P-LEXV,STACK
|
||
|
GETB STACK,2 >CNT
|
||
|
MUL PTR,2
|
||
|
ADD P-LEXV,STACK
|
||
|
GETB STACK,3 >BPTR
|
||
|
?PRG1: GRTR? SUM,10000 /FALSE
|
||
|
DLESS? 'CNT,0 /?REP2
|
||
|
GETB P-INBUF,BPTR >CHR
|
||
|
LESS? CHR,58 \?CCL10
|
||
|
GRTR? CHR,47 \?CCL10
|
||
|
MUL SUM,10 >?TMP1
|
||
|
SUB CHR,48
|
||
|
ADD ?TMP1,STACK >SUM
|
||
|
JUMP ?CND8
|
||
|
?CCL10: EQUAL? CHR,35 \FALSE
|
||
|
?CND8: INC 'BPTR
|
||
|
JUMP ?PRG1
|
||
|
?REP2: CALL CHANGE-LEXV,PTR,W?NUMBER
|
||
|
ADD PTR,P-LEXELEN
|
||
|
GET P-LEXV,STACK
|
||
|
EQUAL? STACK,W?COMMA \?CND14
|
||
|
GRTR? P-LEN,1 \?CND14
|
||
|
ADD PTR,4 >XPTR
|
||
|
CALL AFTER-COMMA-CHECK,XPTR >TMP
|
||
|
ZERO? TMP /?CND14
|
||
|
MUL PTR,2
|
||
|
ADD STACK,2
|
||
|
GETB P-LEXV,STACK >CCTR
|
||
|
MUL XPTR,2
|
||
|
ADD STACK,2
|
||
|
GETB P-LEXV,STACK
|
||
|
ADD CCTR,STACK >CCTR
|
||
|
INC 'CCTR
|
||
|
MUL PTR,2
|
||
|
ADD STACK,2
|
||
|
PUTB P-LEXV,STACK,CCTR
|
||
|
EQUAL? TMP,1000 \?CND20
|
||
|
SET 'TMP,0
|
||
|
?CND20: MUL 1000,SUM
|
||
|
ADD STACK,TMP >SUM
|
||
|
SUB P-LEN,2 >CCTR
|
||
|
?PRG22: DLESS? 'CCTR,0 /?REP23
|
||
|
ADD PTR,P-LEXELEN >PTR
|
||
|
ADD PTR,4 >XPTR
|
||
|
GET P-LEXV,XPTR
|
||
|
CALL CHANGE-LEXV,PTR,STACK
|
||
|
MUL PTR,2
|
||
|
ADD STACK,2 >?TMP1
|
||
|
MUL XPTR,2
|
||
|
ADD STACK,2
|
||
|
GETB P-LEXV,STACK
|
||
|
PUTB P-LEXV,?TMP1,STACK
|
||
|
MUL PTR,2
|
||
|
ADD STACK,3 >?TMP1
|
||
|
MUL XPTR,2
|
||
|
ADD STACK,3
|
||
|
GETB P-LEXV,STACK
|
||
|
PUTB P-LEXV,?TMP1,STACK
|
||
|
JUMP ?PRG22
|
||
|
?REP23: SUB P-LEN,2 >P-LEN
|
||
|
GETB P-LEXV,P-LEXWORDS
|
||
|
SUB STACK,2
|
||
|
PUTB P-LEXV,P-LEXWORDS,STACK
|
||
|
?CND14: GRTR? SUM,10000 /FALSE
|
||
|
SET 'P-NUMBER,SUM
|
||
|
RETURN W?NUMBER
|
||
|
|
||
|
|
||
|
.FUNCT AFTER-COMMA-CHECK,PTR,CNT,BPTR,CCTR=0,CHR,SUM=0,?TMP1
|
||
|
MUL PTR,2
|
||
|
ADD P-LEXV,STACK
|
||
|
GETB STACK,2 >CNT
|
||
|
MUL PTR,2
|
||
|
ADD P-LEXV,STACK
|
||
|
GETB STACK,3 >BPTR
|
||
|
?PRG1: DLESS? 'CNT,0 /?REP2
|
||
|
GETB P-INBUF,BPTR >CHR
|
||
|
IGRTR? 'CCTR,3 /?REP2
|
||
|
LESS? CHR,58 \FALSE
|
||
|
GRTR? CHR,47 \FALSE
|
||
|
MUL SUM,10 >?TMP1
|
||
|
SUB CHR,48
|
||
|
ADD ?TMP1,STACK >SUM
|
||
|
INC 'BPTR
|
||
|
JUMP ?PRG1
|
||
|
?REP2: EQUAL? CCTR,3 \FALSE
|
||
|
ZERO? SUM /?CTR16
|
||
|
RETURN SUM
|
||
|
?CTR16: RETURN 1000
|
||
|
|
||
|
|
||
|
.FUNCT ORPHAN-MERGE,CNT=-1,TEMP,VERB,BEG,END,ADJ=0,WRD,?TMP1
|
||
|
SET 'P-OFLAG,FALSE-VALUE
|
||
|
GET P-ITBL,P-VERBN
|
||
|
GET STACK,0 >WRD
|
||
|
CALL WT?,WRD,64,1 >?TMP1
|
||
|
GET P-OTBL,P-VERB
|
||
|
EQUAL? ?TMP1,STACK /?CTR2
|
||
|
CALL WT?,WRD,32
|
||
|
ZERO? STACK /?CCL3
|
||
|
?CTR2: SET 'ADJ,TRUE-VALUE
|
||
|
JUMP ?CND1
|
||
|
?CCL3: CALL WT?,WRD,128,0
|
||
|
ZERO? STACK /?CND1
|
||
|
ZERO? P-NCN \?CND1
|
||
|
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
|
||
|
?CND1: GET P-ITBL,P-VERB >VERB
|
||
|
ZERO? VERB /?CCL11
|
||
|
ZERO? ADJ \?CCL11
|
||
|
GET P-OTBL,P-VERB
|
||
|
EQUAL? VERB,STACK \FALSE
|
||
|
?CCL11: EQUAL? P-NCN,2 /FALSE
|
||
|
GET P-OTBL,P-NC1
|
||
|
EQUAL? STACK,1 \?CCL18
|
||
|
GET P-ITBL,P-PREP1 >TEMP
|
||
|
GET P-OTBL,P-PREP1
|
||
|
EQUAL? TEMP,STACK /?CTR20
|
||
|
ZERO? TEMP \FALSE
|
||
|
?CTR20: ZERO? ADJ /?CCL26
|
||
|
ADD P-LEXV,2
|
||
|
PUT P-OTBL,P-NC1,STACK
|
||
|
GET P-ITBL,P-NC1L
|
||
|
ZERO? STACK \?CND27
|
||
|
ADD P-LEXV,6
|
||
|
PUT P-ITBL,P-NC1L,STACK
|
||
|
?CND27: ZERO? P-NCN \?CND24
|
||
|
SET 'P-NCN,1
|
||
|
JUMP ?CND24
|
||
|
?CCL26: GET P-ITBL,P-NC1
|
||
|
PUT P-OTBL,P-NC1,STACK
|
||
|
?CND24: GET P-ITBL,P-NC1L
|
||
|
PUT P-OTBL,P-NC1L,STACK
|
||
|
JUMP ?CND9
|
||
|
?CCL18: GET P-OTBL,P-NC2
|
||
|
EQUAL? STACK,1 \?CCL32
|
||
|
GET P-ITBL,P-PREP1 >TEMP
|
||
|
GET P-OTBL,P-PREP2
|
||
|
EQUAL? TEMP,STACK /?CTR34
|
||
|
ZERO? TEMP \FALSE
|
||
|
?CTR34: ZERO? ADJ /?CND38
|
||
|
ADD P-LEXV,2
|
||
|
PUT P-ITBL,P-NC1,STACK
|
||
|
GET P-ITBL,P-NC1L
|
||
|
ZERO? STACK \?CND38
|
||
|
ADD P-LEXV,6
|
||
|
PUT P-ITBL,P-NC1L,STACK
|
||
|
?CND38: 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 ?CND9
|
||
|
?CCL32: ZERO? P-ACLAUSE /?CND9
|
||
|
EQUAL? P-NCN,1 /?CCL45
|
||
|
ZERO? ADJ \?CCL45
|
||
|
SET 'P-ACLAUSE,FALSE-VALUE
|
||
|
RFALSE
|
||
|
?CCL45: GET P-ITBL,P-NC1 >BEG
|
||
|
ZERO? ADJ /?CND48
|
||
|
ADD P-LEXV,2 >BEG
|
||
|
SET 'ADJ,FALSE-VALUE
|
||
|
?CND48: GET P-ITBL,P-NC1L >END
|
||
|
?PRG50: GET BEG,0 >WRD
|
||
|
EQUAL? BEG,END \?CCL54
|
||
|
ZERO? ADJ /?CCL57
|
||
|
CALL CLAUSE-WIN,ADJ
|
||
|
JUMP ?CND9
|
||
|
?CCL57: SET 'P-ACLAUSE,FALSE-VALUE
|
||
|
RFALSE
|
||
|
?CCL54: EQUAL? WRD,W?ALL,W?EVERYT,W?ONE /?CTR58
|
||
|
GETB WRD,P-PSOFF
|
||
|
BTST STACK,32 \?CCL59
|
||
|
CALL ADJ-CHECK,WRD,ADJ,ADJ
|
||
|
ZERO? STACK /?CCL59
|
||
|
?CTR58: SET 'ADJ,WRD
|
||
|
?CND52: ADD BEG,P-WORDLEN >BEG
|
||
|
ZERO? END \?PRG50
|
||
|
SET 'END,BEG
|
||
|
SET 'P-NCN,1
|
||
|
SUB BEG,4
|
||
|
PUT P-ITBL,P-NC1,STACK
|
||
|
PUT P-ITBL,P-NC1L,BEG
|
||
|
JUMP ?PRG50
|
||
|
?CCL59: EQUAL? WRD,W?ONE \?CCL65
|
||
|
CALL CLAUSE-WIN,ADJ
|
||
|
JUMP ?CND9
|
||
|
?CCL65: GETB WRD,P-PSOFF
|
||
|
BTST STACK,128 \?CND52
|
||
|
EQUAL? WRD,P-ANAM \?CCL69
|
||
|
CALL CLAUSE-WIN,ADJ
|
||
|
JUMP ?CND9
|
||
|
?CCL69: CALL CLAUSE-WIN
|
||
|
?CND9: 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
|
||
|
?PRG72: IGRTR? 'CNT,P-ITBLLEN \?CCL76
|
||
|
SET 'P-MERGED,TRUE-VALUE
|
||
|
RTRUE
|
||
|
?CCL76: GET P-OTBL,CNT
|
||
|
PUT P-ITBL,CNT,STACK
|
||
|
JUMP ?PRG72
|
||
|
|
||
|
|
||
|
.FUNCT CLAUSE-WIN,ADJ=0
|
||
|
ZERO? ADJ /?CCL3
|
||
|
GET P-OTBL,P-VERB
|
||
|
PUT P-ITBL,P-VERB,STACK
|
||
|
JUMP ?CND1
|
||
|
?CCL3: SET 'ADJ,TRUE-VALUE
|
||
|
?CND1: PUT P-CCTBL,CC-SBPTR,P-ACLAUSE
|
||
|
ADD P-ACLAUSE,1
|
||
|
PUT P-CCTBL,CC-SEPTR,STACK
|
||
|
EQUAL? P-ACLAUSE,P-NC1 \?CCL6
|
||
|
PUT P-CCTBL,CC-OCLAUSE,P-OCL1
|
||
|
JUMP ?CND4
|
||
|
?CCL6: PUT P-CCTBL,CC-OCLAUSE,P-OCL2
|
||
|
?CND4: CALL CLAUSE-COPY,P-OTBL,P-OTBL,ADJ
|
||
|
GET P-OTBL,P-NC2
|
||
|
ZERO? STACK /?PEN7
|
||
|
SET 'P-NCN,2
|
||
|
?PEN7: SET 'P-ACLAUSE,FALSE-VALUE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT WORD-PRINT,CNT,BUF
|
||
|
?PRG1: DLESS? 'CNT,0 /TRUE
|
||
|
GETB P-INBUF,BUF
|
||
|
PRINTC STACK
|
||
|
INC 'BUF
|
||
|
JUMP ?PRG1
|
||
|
|
||
|
|
||
|
.FUNCT UNKNOWN-WORD,PTR,BUF,?TMP1
|
||
|
PUT OOPS-TABLE,O-PTR,PTR
|
||
|
PRINTI "[I don't know 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
|
||
|
PRINTI ".""]"
|
||
|
CRLF
|
||
|
SET 'QUOTE-FLAG,FALSE-VALUE
|
||
|
SET 'P-OFLAG,FALSE-VALUE
|
||
|
RETURN P-OFLAG
|
||
|
|
||
|
|
||
|
.FUNCT CANT-USE,PTR,FOR-EACH-OTHER=0,BUF,?TMP1
|
||
|
PRINTI "[You used the word """
|
||
|
ZERO? FOR-EACH-OTHER \?CND1
|
||
|
MUL PTR,2 >BUF
|
||
|
ADD P-LEXV,BUF
|
||
|
GETB STACK,2 >?TMP1
|
||
|
ADD P-LEXV,BUF
|
||
|
GETB STACK,3
|
||
|
CALL WORD-PRINT,?TMP1,STACK
|
||
|
?CND1: PRINTI """ in a way that I don't understand.]"
|
||
|
CRLF
|
||
|
CALL STOP
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1=0,DRIVE2=0,PREP,VERB,?TMP2,?TMP1
|
||
|
GET P-ITBL,P-VERB >VERB
|
||
|
ZERO? VERB \?CND1
|
||
|
PRINT NO-VERB
|
||
|
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 RECOGNIZE
|
||
|
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: EQUAL? WINNER,PROTAGONIST \?CCL41
|
||
|
CALL ORPHAN,DRIVE1,DRIVE2
|
||
|
PRINTI "[Wh"
|
||
|
JUMP ?CND39
|
||
|
?CCL41: PRINTI "[Your command was not complete. Next time, type wh"
|
||
|
?CND39: EQUAL? VERB,ACT?WALK,ACT?GO \?CCL44
|
||
|
PRINTI "ere"
|
||
|
JUMP ?CND42
|
||
|
?CCL44: ZERO? DRIVE1 /?PRD48
|
||
|
GETB DRIVE1,P-SFWIM1
|
||
|
EQUAL? STACK,ACTORBIT /?CTR45
|
||
|
?PRD48: ZERO? DRIVE2 /?CCL46
|
||
|
GETB DRIVE2,P-SFWIM2
|
||
|
EQUAL? STACK,ACTORBIT \?CCL46
|
||
|
?CTR45: PRINTI "om"
|
||
|
JUMP ?CND42
|
||
|
?CCL46: PRINTI "at"
|
||
|
?CND42: EQUAL? WINNER,PROTAGONIST \?CCL55
|
||
|
PRINT DO-YOU-WANT
|
||
|
JUMP ?CND53
|
||
|
?CCL55: PRINTI " you want"
|
||
|
CALL TPRINT,WINNER
|
||
|
PRINTI " to "
|
||
|
?CND53: CALL VERB-PRINT
|
||
|
SET 'P-OFLAG,FALSE-VALUE
|
||
|
ZERO? DRIVE2 /?CND56
|
||
|
SET 'PREP,P-MERGED
|
||
|
SET 'P-MERGED,FALSE-VALUE
|
||
|
CALL CLAUSE-PRINT,P-NC1,P-NC1L
|
||
|
SET 'P-MERGED,PREP
|
||
|
?CND56: ZERO? DRIVE1 /?CCL60
|
||
|
GETB DRIVE1,P-SPREP1
|
||
|
JUMP ?CND58
|
||
|
?CCL60: GETB DRIVE2,P-SPREP2
|
||
|
?CND58: CALL PREP-PRINT,STACK
|
||
|
EQUAL? WINNER,PROTAGONIST \?CCL63
|
||
|
SET 'P-OFLAG,TRUE-VALUE
|
||
|
PRINTI "?]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL63: SET 'P-OFLAG,FALSE-VALUE
|
||
|
PRINTI ".]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT VERB-PRINT,TMP,?TMP1
|
||
|
GET P-ITBL,P-VERBN >TMP
|
||
|
ZERO? TMP \?CCL3
|
||
|
PRINTI "tell"
|
||
|
RTRUE
|
||
|
?CCL3: EQUAL? TMP,W?ZZMGCK \?CCL5
|
||
|
PRINTI "answer"
|
||
|
RTRUE
|
||
|
?CCL5: GETB TMP,2
|
||
|
ZERO? STACK \?CCL7
|
||
|
GET TMP,0
|
||
|
PRINTB STACK
|
||
|
RTRUE
|
||
|
?CCL7: GETB TMP,2 >?TMP1
|
||
|
GETB TMP,3
|
||
|
CALL WORD-PRINT,?TMP1,STACK
|
||
|
PUTB TMP,2,0
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT CANT-ORPHAN
|
||
|
PRINTI """I don't understand! What are you referring to?"""
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.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-SBPTR,P-NC2
|
||
|
PUT P-CCTBL,CC-SEPTR,P-NC2L
|
||
|
PUT P-CCTBL,CC-OCLAUSE,P-OCL2
|
||
|
CALL CLAUSE-COPY,P-ITBL,P-OTBL
|
||
|
?CND8: LESS? P-NCN,1 /?CND10
|
||
|
PUT P-CCTBL,CC-SBPTR,P-NC1
|
||
|
PUT P-CCTBL,CC-SEPTR,P-NC1L
|
||
|
PUT P-CCTBL,CC-OCLAUSE,P-OCL1
|
||
|
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,FIRST??=1,PN=0,?TMP1
|
||
|
?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?PERIOD /?CTR10
|
||
|
ZERO? FIRST?? /?CCL11
|
||
|
EQUAL? WRD,W?OF \?CCL11
|
||
|
?CTR10: SET 'NOSP,TRUE-VALUE
|
||
|
JUMP ?CND3
|
||
|
?CCL11: EQUAL? WRD,W?ME,W?MYSELF \?CCL17
|
||
|
PRINTD ME
|
||
|
SET 'PN,TRUE-VALUE
|
||
|
JUMP ?CND3
|
||
|
?CCL17: CALL NAME?,WRD
|
||
|
ZERO? STACK /?CCL19
|
||
|
CALL CAPITALIZE,BEG
|
||
|
SET 'PN,TRUE-VALUE
|
||
|
JUMP ?CND3
|
||
|
?CCL19: ZERO? FIRST?? /?CND20
|
||
|
ZERO? PN \?CND20
|
||
|
ZERO? CP /?CND20
|
||
|
EQUAL? WRD,W?MY,W?HER /?CND20
|
||
|
PRINTI "the "
|
||
|
?CND20: ZERO? P-OFLAG \?CTR27
|
||
|
ZERO? P-MERGED /?CCL28
|
||
|
?CTR27: PRINTB WRD
|
||
|
JUMP ?CND26
|
||
|
?CCL28: EQUAL? WRD,W?IT,W?THEM \?CCL32
|
||
|
CALL ACCESSIBLE?,P-IT-OBJECT
|
||
|
ZERO? STACK /?CCL32
|
||
|
PRINTD P-IT-OBJECT
|
||
|
JUMP ?CND26
|
||
|
?CCL32: EQUAL? WRD,W?HIM,W?HIMSELF \?CCL36
|
||
|
CALL ACCESSIBLE?,P-HIM-OBJECT
|
||
|
ZERO? STACK /?CCL36
|
||
|
PRINTD P-HIM-OBJECT
|
||
|
JUMP ?CND26
|
||
|
?CCL36: EQUAL? WRD,W?HER,W?HERSELF \?CCL40
|
||
|
CALL ACCESSIBLE?,P-HER-OBJECT
|
||
|
ZERO? STACK /?CCL40
|
||
|
PRINTD P-HER-OBJECT
|
||
|
JUMP ?CND26
|
||
|
?CCL40: GETB BEG,2 >?TMP1
|
||
|
GETB BEG,3
|
||
|
CALL WORD-PRINT,?TMP1,STACK
|
||
|
?CND26: SET 'FIRST??,FALSE-VALUE
|
||
|
?CND3: ADD BEG,P-WORDLEN >BEG
|
||
|
JUMP ?PRG1
|
||
|
|
||
|
|
||
|
.FUNCT NAME?,WRD
|
||
|
EQUAL? WRD,W?DAD,W?PAPA,W?FATHER /TRUE
|
||
|
EQUAL? WRD,W?DIMSFORD /TRUE
|
||
|
EQUAL? WRD,W?CRULLEY,W?LUCY,W?LAFOND /TRUE
|
||
|
EQUAL? WRD,W?GOVERNOR /TRUE
|
||
|
EQUAL? WRD,W?JAMISON,W?COOKIE,W?QUICK /TRUE
|
||
|
EQUAL? WRD,W?RODNEY /TRUE
|
||
|
EQUAL? WRD,W?LOUISE,W?DAVIS,W?SINISTRA /TRUE
|
||
|
EQUAL? WRD,W?LATIN /TRUE
|
||
|
EQUAL? WRD,W?NICK,W?NICHOLAS,W?FALCON /TRUE
|
||
|
EQUAL? WRD,W?HELENA /TRUE
|
||
|
EQUAL? WRD,W?JEAN,W?ANDY,W?ANDREW /TRUE
|
||
|
EQUAL? WRD,W?ST /TRUE
|
||
|
EQUAL? WRD,W?ERNEST,W?RYALL,W?RODNEY /TRUE
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT ADJNAME?,ADJ
|
||
|
EQUAL? ADJ,A?NICK,A?NICHOLAS,A?FALCON /TRUE
|
||
|
EQUAL? ADJ,A?HELENA /TRUE
|
||
|
EQUAL? ADJ,A?JEAN,A?ANDY,A?ANDREW /TRUE
|
||
|
EQUAL? ADJ,A?ST /TRUE
|
||
|
EQUAL? ADJ,A?ERNEST,A?RYALL,A?RODNEY /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,WRD
|
||
|
ZERO? PREP /FALSE
|
||
|
PRINTC 32
|
||
|
EQUAL? PREP,PR?THROUGH \?CCL6
|
||
|
PRINTI "through"
|
||
|
RTRUE
|
||
|
?CCL6: CALL PREP-FIND,PREP >WRD
|
||
|
PRINTB WRD
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT CLAUSE-COPY,SRC,DEST,INSRT=0,OCL,BEG,END,BB,EE,OBEG,CNT,B,E
|
||
|
GET P-CCTBL,CC-SBPTR >BB
|
||
|
GET P-CCTBL,CC-SEPTR >EE
|
||
|
GET P-CCTBL,CC-OCLAUSE >OCL
|
||
|
GET SRC,BB >BEG
|
||
|
GET SRC,EE >END
|
||
|
GET OCL,P-MATCHLEN >OBEG
|
||
|
?PRG1: EQUAL? BEG,END /?REP2
|
||
|
ZERO? INSRT /?CCL7
|
||
|
GET BEG,0
|
||
|
EQUAL? P-ANAM,STACK \?CCL7
|
||
|
EQUAL? INSRT,TRUE-VALUE \?CCL12
|
||
|
GET P-ITBL,P-NC1 >B
|
||
|
GET P-ITBL,P-NC1L >E
|
||
|
?PRG13: EQUAL? B,E /?CND5
|
||
|
GET B,0
|
||
|
CALL CLAUSE-ADD,STACK
|
||
|
ADD B,P-WORDLEN >B
|
||
|
JUMP ?PRG13
|
||
|
?CCL12: GET OCL,1
|
||
|
EQUAL? INSRT,STACK /?CND5
|
||
|
CALL CLAUSE-ADD,INSRT
|
||
|
GET BEG,0
|
||
|
CALL CLAUSE-ADD,STACK
|
||
|
JUMP ?CND5
|
||
|
?CCL7: GET BEG,0
|
||
|
CALL CLAUSE-ADD,STACK
|
||
|
?CND5: ADD BEG,P-WORDLEN >BEG
|
||
|
JUMP ?PRG1
|
||
|
?REP2: EQUAL? SRC,DEST \?CND18
|
||
|
GRTR? OBEG,0 \?CND18
|
||
|
GET OCL,P-MATCHLEN
|
||
|
SUB STACK,OBEG >CNT
|
||
|
PUT OCL,P-MATCHLEN,0
|
||
|
INC 'OBEG
|
||
|
?PRG22: GET OCL,OBEG
|
||
|
CALL CLAUSE-ADD,STACK
|
||
|
SUB CNT,2 >CNT
|
||
|
ZERO? CNT /?REP23
|
||
|
ADD OBEG,2 >OBEG
|
||
|
JUMP ?PRG22
|
||
|
?REP23: SET 'OBEG,0
|
||
|
?CND18: 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-ADD,WRD,OCL,PTR
|
||
|
GET P-CCTBL,CC-OCLAUSE >OCL
|
||
|
GET OCL,P-MATCHLEN
|
||
|
ADD STACK,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,RLANDBIT \?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 91
|
||
|
ZERO? PREP /?CND9
|
||
|
ZERO? P-END-ON-PREP \?CND9
|
||
|
CALL PREP-FIND,PREP >PREP
|
||
|
PRINTB PREP
|
||
|
EQUAL? PREP,W?OUT \?CND13
|
||
|
PRINTI " of"
|
||
|
?CND13: FSET? OBJ,NARTICLEBIT /?CCL17
|
||
|
PRINTI " the "
|
||
|
JUMP ?CND9
|
||
|
?CCL17: PRINTC 32
|
||
|
?CND9: PRINTD OBJ
|
||
|
PRINTC 93
|
||
|
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 SNARFEM,PTR,EPTR,TBL,BUT=0,LEN,WV,WRD,NW,WAS-ALL=0
|
||
|
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,W?BOTH,W?EVERYT \?CCL18
|
||
|
CALL MANY-CHECK,P-PHR
|
||
|
ZERO? STACK /FALSE
|
||
|
SET 'P-GETFLAGS,P-ALL
|
||
|
EQUAL? NW,W?OF \?CND5
|
||
|
ADD PTR,P-WORDLEN >PTR
|
||
|
JUMP ?CND5
|
||
|
?CCL18: EQUAL? WRD,W?BUT,W?EXCEPT \?CCL24
|
||
|
ZERO? BUT /?PRD29
|
||
|
PUSH BUT
|
||
|
JUMP ?PEN27
|
||
|
?PRD29: PUSH TBL
|
||
|
?PEN27: CALL GET-OBJECT,STACK
|
||
|
ZERO? STACK /FALSE
|
||
|
SET 'BUT,P-BUTS
|
||
|
PUTB BUT,P-MATCHLEN,0
|
||
|
JUMP ?CND5
|
||
|
?CCL24: EQUAL? WRD,W?A,W?ONE \?CCL31
|
||
|
ZERO? P-ADJ \?CCL34
|
||
|
SET 'P-GETFLAGS,P-ONE
|
||
|
EQUAL? NW,W?OF \?CND5
|
||
|
ADD PTR,P-WORDLEN >PTR
|
||
|
JUMP ?CND5
|
||
|
?CCL34: SET 'P-NAM,P-ONEOBJ
|
||
|
ZERO? BUT /?PRD41
|
||
|
PUSH BUT
|
||
|
JUMP ?PEN39
|
||
|
?PRD41: PUSH TBL
|
||
|
?PEN39: CALL GET-OBJECT,STACK
|
||
|
ZERO? STACK /FALSE
|
||
|
ZERO? NW \?CND5
|
||
|
RTRUE
|
||
|
?CCL31: EQUAL? WRD,W?AND,W?COMMA \?CCL45
|
||
|
EQUAL? NW,W?AND,W?COMMA /?CCL45
|
||
|
SET 'P-AND,TRUE-VALUE
|
||
|
ZERO? BUT /?PRD52
|
||
|
PUSH BUT
|
||
|
JUMP ?PEN50
|
||
|
?PRD52: PUSH TBL
|
||
|
?PEN50: CALL GET-OBJECT,STACK
|
||
|
ZERO? STACK \?CND5
|
||
|
RFALSE
|
||
|
?CCL45: CALL WT?,WRD,4
|
||
|
ZERO? STACK \?CND5
|
||
|
EQUAL? WRD,W?AND,W?COMMA /?CND5
|
||
|
EQUAL? WRD,W?OF \?CCL56
|
||
|
ZERO? P-GETFLAGS \?CND5
|
||
|
SET 'P-GETFLAGS,P-INHIBIT
|
||
|
JUMP ?CND5
|
||
|
?CCL56: CALL WT?,WRD,32,2 >WV
|
||
|
ZERO? WV /?CCL60
|
||
|
CALL ADJ-CHECK,WRD,P-ADJ,P-ADJN
|
||
|
ZERO? STACK /?CCL60
|
||
|
EQUAL? NW,W?OF /?CCL60
|
||
|
SET 'P-ADJ,WV
|
||
|
SET 'P-ADJN,WRD
|
||
|
JUMP ?CND5
|
||
|
?CCL60: CALL WT?,WRD,128,0
|
||
|
ZERO? STACK /?CND5
|
||
|
SET 'P-NAM,WRD
|
||
|
SET 'P-ONEOBJ,WRD
|
||
|
?CND5: EQUAL? PTR,EPTR /?PRG3
|
||
|
ADD PTR,P-WORDLEN >PTR
|
||
|
SET 'WRD,NW
|
||
|
JUMP ?PRG3
|
||
|
|
||
|
|
||
|
.FUNCT ADJ-CHECK,WRD,ADJ,ADJN
|
||
|
ZERO? ADJ \FALSE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT GET-OBJECT,TBL,VRB=1,BITS,LEN,XBITS,TLEN,GCHECK=0,OLEN=0,OBJ
|
||
|
SET 'XBITS,P-SLOCBITS
|
||
|
GETB TBL,P-MATCHLEN >TLEN
|
||
|
BTST P-GETFLAGS,P-INHIBIT /TRUE
|
||
|
ZERO? P-NAM \?CND3
|
||
|
ZERO? P-ADJ /?CND3
|
||
|
CALL WT?,P-ADJN,128,0
|
||
|
ZERO? STACK /?CCL9
|
||
|
SET 'P-NAM,P-ADJN
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
SET 'P-ADJN,FALSE-VALUE
|
||
|
JUMP ?CND3
|
||
|
?CCL9: CALL WT?,P-ADJN,16,3 >BITS
|
||
|
ZERO? BITS /?CND3
|
||
|
SET 'P-DIRECTION,BITS
|
||
|
?CND3: ZERO? P-NAM \?CND11
|
||
|
ZERO? P-ADJ \?CND11
|
||
|
EQUAL? P-GETFLAGS,P-ALL /?CND11
|
||
|
ZERO? P-GWIMBIT \?CND11
|
||
|
ZERO? VRB /FALSE
|
||
|
PRINT NOUN-MISSING
|
||
|
RFALSE
|
||
|
?CND11: EQUAL? P-GETFLAGS,P-ALL \?CCL20
|
||
|
ZERO? P-SLOCBITS \?CND19
|
||
|
?CCL20: SET 'P-SLOCBITS,-1
|
||
|
?CND19: SET 'P-TABLE,TBL
|
||
|
?PRG23: ZERO? GCHECK /?CCL27
|
||
|
CALL GLOBAL-CHECK,TBL
|
||
|
JUMP ?CND25
|
||
|
?CCL27: ZERO? LIT \?CTR29
|
||
|
EQUAL? PRSA,V?TELL \?CCL30
|
||
|
?CTR29: FCLEAR PROTAGONIST,TRANSBIT
|
||
|
CALL DO-SL,HERE,SOG,SIR
|
||
|
FSET PROTAGONIST,TRANSBIT
|
||
|
JUMP ?CND28
|
||
|
?CCL30: LOC PROTAGONIST
|
||
|
FSET? STACK,VEHBIT \?CND28
|
||
|
LOC PROTAGONIST
|
||
|
CALL THIS-IT?,STACK
|
||
|
ZERO? STACK /?CND28
|
||
|
LOC PROTAGONIST
|
||
|
CALL OBJ-FOUND,STACK,TBL
|
||
|
?CND28: CALL DO-SL,PROTAGONIST,SH,SC
|
||
|
?CND25: GETB TBL,P-MATCHLEN
|
||
|
SUB STACK,TLEN >LEN
|
||
|
BTST P-GETFLAGS,P-ALL /?CND36
|
||
|
EQUAL? P-GETFLAGS,P-ALL /?CCL39
|
||
|
GRTR? LEN,1 /?CTR38
|
||
|
ZERO? LEN \?CCL39
|
||
|
EQUAL? P-SLOCBITS,-1 /?CCL39
|
||
|
?CTR38: EQUAL? P-SLOCBITS,-1 \?CCL48
|
||
|
SET 'P-SLOCBITS,XBITS
|
||
|
SET 'OLEN,LEN
|
||
|
GETB TBL,P-MATCHLEN
|
||
|
SUB STACK,LEN
|
||
|
PUTB TBL,P-MATCHLEN,STACK
|
||
|
JUMP ?PRG23
|
||
|
?CCL48: CALL PUT-ADJ-NAM
|
||
|
ZERO? LEN \?CND49
|
||
|
SET 'LEN,OLEN
|
||
|
?CND49: ZERO? P-NAM /?CCL53
|
||
|
ADD TLEN,1
|
||
|
GETB TBL,STACK >OBJ
|
||
|
ZERO? OBJ /?CCL53
|
||
|
GETP OBJ,P?GENERIC
|
||
|
CALL STACK >OBJ
|
||
|
ZERO? OBJ /?CCL53
|
||
|
EQUAL? OBJ,NOT-HERE-OBJECT /FALSE
|
||
|
PUTB TBL,1,OBJ
|
||
|
PUTB TBL,P-MATCHLEN,1
|
||
|
SET 'P-NAM,FALSE-VALUE
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
RTRUE
|
||
|
?CCL53: ZERO? VRB /?CCL60
|
||
|
EQUAL? WINNER,PROTAGONIST /?CCL60
|
||
|
CALL CANT-ORPHAN
|
||
|
SET 'P-NAM,FALSE-VALUE
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
RFALSE
|
||
|
?CCL60: ZERO? VRB /?CCL64
|
||
|
ZERO? P-NAM /?CCL64
|
||
|
CALL WHICH-PRINT,TLEN,LEN,TBL
|
||
|
EQUAL? TBL,P-PRSO \?CCL69
|
||
|
SET 'P-ACLAUSE,P-NC1
|
||
|
JUMP ?CND67
|
||
|
?CCL69: SET 'P-ACLAUSE,P-NC2
|
||
|
?CND67: SET 'P-AADJ,P-ADJ
|
||
|
SET 'P-ANAM,P-NAM
|
||
|
CALL ORPHAN,FALSE-VALUE,FALSE-VALUE
|
||
|
SET 'P-OFLAG,TRUE-VALUE
|
||
|
JUMP ?CND51
|
||
|
?CCL64: ZERO? VRB /?CND51
|
||
|
PRINT NOUN-MISSING
|
||
|
?CND51: SET 'P-NAM,FALSE-VALUE
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
RFALSE
|
||
|
?CCL39: ZERO? LEN \?CCL72
|
||
|
ZERO? GCHECK /?CCL72
|
||
|
CALL PUT-ADJ-NAM
|
||
|
ZERO? VRB /?CND75
|
||
|
SET 'P-SLOCBITS,XBITS
|
||
|
ZERO? LIT \?CTR78
|
||
|
EQUAL? PRSA,V?TELL,V?OPEN /?CTR78
|
||
|
EQUAL? PRSA,V?WHERE,V?WHAT \?CCL79
|
||
|
?CTR78: CALL OBJ-FOUND,NOT-HERE-OBJECT,TBL
|
||
|
SET 'P-XNAM,P-NAM
|
||
|
SET 'P-XADJ,P-ADJ
|
||
|
SET 'P-XADJN,P-ADJN
|
||
|
SET 'P-NAM,FALSE-VALUE
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
SET 'P-ADJN,FALSE-VALUE
|
||
|
RTRUE
|
||
|
?CCL79: PRINT TOO-DARK
|
||
|
CRLF
|
||
|
?CND75: SET 'P-NAM,FALSE-VALUE
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
RFALSE
|
||
|
?CCL72: ZERO? LEN \?CND36
|
||
|
SET 'GCHECK,TRUE-VALUE
|
||
|
JUMP ?PRG23
|
||
|
?CND36: SET 'P-SLOCBITS,XBITS
|
||
|
CALL PUT-ADJ-NAM
|
||
|
SET 'P-NAM,FALSE-VALUE
|
||
|
SET 'P-ADJ,FALSE-VALUE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT PUT-ADJ-NAM
|
||
|
EQUAL? P-NAM,W?IT /FALSE
|
||
|
PUT P-NAMW,P-PHR,P-NAM
|
||
|
PUT P-ADJW,P-PHR,P-ADJ
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT MOBY-FIND,TBL,OBJ=1,LEN,FOO,NAM,ADJ
|
||
|
SET 'NAM,P-NAM
|
||
|
SET 'ADJ,P-ADJ
|
||
|
SET 'P-NAM,P-XNAM
|
||
|
SET 'P-ADJ,P-XADJ
|
||
|
PUTB TBL,P-MATCHLEN,0
|
||
|
?PRG3: CALL THIS-IT?,OBJ >FOO
|
||
|
ZERO? FOO /?CND5
|
||
|
CALL OBJ-FOUND,OBJ,TBL >FOO
|
||
|
?CND5: IGRTR? 'OBJ,LAST-OBJECT \?PRG3
|
||
|
GETB TBL,P-MATCHLEN >LEN
|
||
|
EQUAL? LEN,1 \?CND10
|
||
|
GETB TBL,1 >P-MOBY-FOUND
|
||
|
?CND10: SET 'P-NAM,NAM
|
||
|
SET 'P-ADJ,ADJ
|
||
|
RETURN LEN
|
||
|
|
||
|
|
||
|
.FUNCT WHICH-PRINT,TLEN,LEN,TBL,OBJ,RLEN
|
||
|
SET 'RLEN,LEN
|
||
|
PRINTI "[Which"
|
||
|
ZERO? P-OFLAG \?CTR2
|
||
|
ZERO? P-MERGED \?CTR2
|
||
|
ZERO? P-AND /?CCL3
|
||
|
?CTR2: PRINTC 32
|
||
|
PRINTB P-NAM
|
||
|
JUMP ?CND1
|
||
|
?CCL3: EQUAL? TBL,P-PRSO \?CCL8
|
||
|
CALL CLAUSE-PRINT,P-NC1,P-NC1L,FALSE-VALUE
|
||
|
JUMP ?CND1
|
||
|
?CCL8: CALL CLAUSE-PRINT,P-NC2,P-NC2L,FALSE-VALUE
|
||
|
?CND1: PRINTI " dost thou mean, "
|
||
|
?PRG9: INC 'TLEN
|
||
|
GETB TBL,TLEN >OBJ
|
||
|
FSET? OBJ,NARTICLEBIT /?CND11
|
||
|
PRINTI "the "
|
||
|
?CND11: PRINTD OBJ
|
||
|
EQUAL? LEN,2 \?CCL15
|
||
|
EQUAL? RLEN,2 /?CND16
|
||
|
PRINTC 44
|
||
|
?CND16: PRINTI " or "
|
||
|
JUMP ?CND13
|
||
|
?CCL15: GRTR? LEN,2 \?CND13
|
||
|
PRINTI ", "
|
||
|
?CND13: DLESS? 'LEN,1 \?PRG9
|
||
|
PRINTR "?]"
|
||
|
|
||
|
|
||
|
.FUNCT GLOBAL-CHECK,TBL,LEN,RMG,RMGL,CNT=0,OBJ,OBITS,FOO
|
||
|
GETB TBL,P-MATCHLEN >LEN
|
||
|
SET 'OBITS,P-SLOCBITS
|
||
|
GETPT HERE,P?GLOBAL >RMG
|
||
|
ZERO? RMG /?CND1
|
||
|
PTSIZE RMG
|
||
|
SUB STACK,1 >RMGL
|
||
|
?PRG3: GETB RMG,CNT >OBJ
|
||
|
CALL THIS-IT?,OBJ
|
||
|
ZERO? STACK /?CND5
|
||
|
CALL OBJ-FOUND,OBJ,TBL
|
||
|
?CND5: IGRTR? 'CNT,RMGL \?PRG3
|
||
|
?CND1: 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
|
||
|
RETURN P-SLOCBITS
|
||
|
|
||
|
|
||
|
.FUNCT DO-SL,OBJ,BIT1,BIT2,BTS
|
||
|
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,FLS,NOBJ
|
||
|
FIRST? OBJ >OBJ \FALSE
|
||
|
?PRG4: EQUAL? LVL,P-SRCBOT /?CND6
|
||
|
GETPT OBJ,P?SYNONYM
|
||
|
ZERO? STACK /?CND6
|
||
|
CALL THIS-IT?,OBJ
|
||
|
ZERO? STACK /?CND6
|
||
|
CALL OBJ-FOUND,OBJ,TBL
|
||
|
?CND6: ZERO? LVL \?PRD14
|
||
|
FSET? OBJ,SEARCHBIT /?PRD14
|
||
|
FSET? OBJ,SURFACEBIT \?CND11
|
||
|
?PRD14: FIRST? OBJ >NOBJ \?CND11
|
||
|
FSET? OBJ,OPENBIT /?CCL19
|
||
|
FSET? OBJ,TRANSBIT /?CCL19
|
||
|
ZERO? P-MOBY-FLAG /?CND11
|
||
|
?CCL19: FSET? OBJ,SURFACEBIT \?CCL25
|
||
|
PUSH P-SRCALL
|
||
|
JUMP ?CND23
|
||
|
?CCL25: FSET? OBJ,SEARCHBIT \?CCL27
|
||
|
PUSH P-SRCALL
|
||
|
JUMP ?CND23
|
||
|
?CCL27: PUSH P-SRCTOP
|
||
|
?CND23: CALL SEARCH-LIST,OBJ,TBL,STACK >FLS
|
||
|
?CND11: NEXT? OBJ >OBJ /?PRG4
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT OBJ-FOUND,OBJ,TBL,PTR
|
||
|
GETB TBL,P-MATCHLEN >PTR
|
||
|
ADD PTR,1
|
||
|
PUTB TBL,STACK,OBJ
|
||
|
ADD PTR,1
|
||
|
PUTB TBL,P-MATCHLEN,STACK
|
||
|
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,IBITS,PTR,OBJ,TAKEN
|
||
|
GETB TBL,P-MATCHLEN >PTR
|
||
|
ZERO? PTR /TRUE
|
||
|
BTST IBITS,SHAVE /?PRG8
|
||
|
BTST IBITS,STAKE \TRUE
|
||
|
?PRG8: DLESS? 'PTR,0 /TRUE
|
||
|
ADD PTR,1
|
||
|
GETB TBL,STACK >OBJ
|
||
|
EQUAL? OBJ,IT \?CCL15
|
||
|
CALL VISIBLE?,P-IT-OBJECT
|
||
|
ZERO? STACK \?CCL18
|
||
|
CALL REFERRING
|
||
|
RFALSE
|
||
|
?CCL18: SET 'OBJ,P-IT-OBJECT
|
||
|
JUMP ?CND13
|
||
|
?CCL15: EQUAL? OBJ,HIM \?CCL20
|
||
|
CALL VISIBLE?,P-HIM-OBJECT
|
||
|
ZERO? STACK \?CCL23
|
||
|
CALL REFERRING,TRUE-VALUE
|
||
|
RFALSE
|
||
|
?CCL23: SET 'OBJ,P-HIM-OBJECT
|
||
|
JUMP ?CND13
|
||
|
?CCL20: EQUAL? OBJ,HER \?CND13
|
||
|
CALL VISIBLE?,P-HER-OBJECT
|
||
|
ZERO? STACK \?CCL27
|
||
|
CALL REFERRING,TRUE-VALUE
|
||
|
RFALSE
|
||
|
?CCL27: SET 'OBJ,P-HER-OBJECT
|
||
|
?CND13: CALL HELD?,OBJ
|
||
|
ZERO? STACK \?PRG8
|
||
|
EQUAL? OBJ,HANDS /?PRG8
|
||
|
EQUAL? PRSA,V?TAKE-WITH \?CCL34
|
||
|
EQUAL? OBJ,MAN /?PRG8
|
||
|
?CCL34: SET 'PRSO,OBJ
|
||
|
FSET? OBJ,TRYTAKEBIT \?CCL39
|
||
|
SET 'TAKEN,TRUE-VALUE
|
||
|
JUMP ?CND37
|
||
|
?CCL39: CALL UNTOUCHABLE?,OBJ
|
||
|
ZERO? STACK /?CCL41
|
||
|
SET 'TAKEN,TRUE-VALUE
|
||
|
JUMP ?CND37
|
||
|
?CCL41: EQUAL? OBJ,WINE \?CCL43
|
||
|
CALL HELD?,BLUE-GLASS
|
||
|
ZERO? STACK \?CTR42
|
||
|
CALL HELD?,GREEN-GLASS
|
||
|
ZERO? STACK /?CCL43
|
||
|
?CTR42: SET 'TAKEN,FALSE-VALUE
|
||
|
JUMP ?CND37
|
||
|
?CCL43: EQUAL? HERE,ON-LADDER \?CCL49
|
||
|
EQUAL? OBJ,LADDER \?CCL49
|
||
|
SET 'TAKEN,FALSE-VALUE
|
||
|
JUMP ?CND37
|
||
|
?CCL49: EQUAL? WINNER,PROTAGONIST /?CCL53
|
||
|
SET 'TAKEN,FALSE-VALUE
|
||
|
JUMP ?CND37
|
||
|
?CCL53: BTST IBITS,STAKE \?CCL55
|
||
|
CALL ITAKE,FALSE-VALUE
|
||
|
EQUAL? STACK,TRUE-VALUE \?CCL55
|
||
|
SET 'TAKEN,FALSE-VALUE
|
||
|
JUMP ?CND37
|
||
|
?CCL55: SET 'TAKEN,TRUE-VALUE
|
||
|
?CND37: ZERO? TAKEN /?CCL60
|
||
|
BTST IBITS,SHAVE \?CCL60
|
||
|
GETB TBL,P-MATCHLEN
|
||
|
LESS? 1,STACK \?CCL65
|
||
|
PRINT YNH
|
||
|
PRINTI " those things!"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CCL65: EQUAL? OBJ,NOT-HERE-OBJECT \?CND63
|
||
|
PRINT YOU-CANT
|
||
|
PRINTI "see that here!"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?CND63: EQUAL? WINNER,PROTAGONIST \?CCL69
|
||
|
PRINT YNH
|
||
|
JUMP ?CND67
|
||
|
?CCL69: PRINT DOESNT-LOOK
|
||
|
CALL TPRINT,WINNER
|
||
|
PRINTI " has"
|
||
|
?CND67: CALL THIS-IS-IT,OBJ
|
||
|
CALL TRPRINT,OBJ
|
||
|
RFALSE
|
||
|
?CCL60: ZERO? TAKEN \?PRG8
|
||
|
IN? PROTAGONIST,OBJ /?PRG8
|
||
|
EQUAL? WINNER,PROTAGONIST \?PRG8
|
||
|
PRINTI "[taking"
|
||
|
CALL TPRINT,OBJ
|
||
|
PRINTI " first]"
|
||
|
CRLF
|
||
|
JUMP ?PRG8
|
||
|
|
||
|
|
||
|
.FUNCT MANY-CHECK,PHR=2,LOSS=0,TMP,?TMP1
|
||
|
ZERO? PHR \?CCL3
|
||
|
GETB P-SYNTAX,P-SLOC1
|
||
|
BTST STACK,SMANY /?CCL3
|
||
|
SET 'LOSS,1
|
||
|
JUMP ?CND1
|
||
|
?CCL3: EQUAL? PHR,1 \?CCL7
|
||
|
GETB P-SYNTAX,P-SLOC2
|
||
|
BTST STACK,SMANY /?CCL7
|
||
|
SET 'LOSS,2
|
||
|
JUMP ?CND1
|
||
|
?CCL7: EQUAL? PHR,2 \?CCL11
|
||
|
GETB P-PRSO,P-MATCHLEN
|
||
|
GRTR? STACK,1 \?CCL11
|
||
|
GETB P-SYNTAX,P-SLOC1
|
||
|
BTST STACK,SMANY /?CCL11
|
||
|
SET 'LOSS,1
|
||
|
JUMP ?CND1
|
||
|
?CCL11: EQUAL? PHR,2 \?CND1
|
||
|
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
|
||
|
PRINTC 91
|
||
|
PRINT YOU-CANT
|
||
|
PRINTI "use multiple "
|
||
|
EQUAL? LOSS,2 \?CND22
|
||
|
PRINTI "in"
|
||
|
?CND22: PRINTI "direct objects with """
|
||
|
GET P-ITBL,P-VERBN >TMP
|
||
|
ZERO? TMP \?CCL26
|
||
|
PRINTI "tell"
|
||
|
JUMP ?CND24
|
||
|
?CCL26: ZERO? P-OFLAG \?CTR27
|
||
|
ZERO? P-MERGED /?CCL28
|
||
|
?CTR27: GET TMP,0
|
||
|
PRINTB STACK
|
||
|
JUMP ?CND24
|
||
|
?CCL28: GETB TMP,2 >?TMP1
|
||
|
GETB TMP,3
|
||
|
CALL WORD-PRINT,?TMP1,STACK
|
||
|
?CND24: PRINTI """.]"
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT ZMEMQ,ITM,TBL,SIZE=-1,CNT=1
|
||
|
ZERO? TBL /FALSE
|
||
|
LESS? SIZE,0 /?CCL5
|
||
|
SET 'CNT,0
|
||
|
JUMP ?PRG6
|
||
|
?CCL5: GET TBL,0 >SIZE
|
||
|
?PRG6: GET TBL,CNT
|
||
|
EQUAL? ITM,STACK /TRUE
|
||
|
IGRTR? 'CNT,SIZE \?PRG6
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT ZMEMQB,ITM,TBL,SIZE=-1,CNT=1
|
||
|
LESS? SIZE,0 /?CCL3
|
||
|
SET 'CNT,0
|
||
|
JUMP ?PRG4
|
||
|
?CCL3: GETB TBL,0 >SIZE
|
||
|
?PRG4: GETB TBL,CNT
|
||
|
EQUAL? ITM,STACK /TRUE
|
||
|
IGRTR? 'CNT,SIZE \?PRG4
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT LIT?,RM,RMBIT=1,OHERE,LIT=0
|
||
|
SET 'P-GWIMBIT,ONBIT
|
||
|
SET 'OHERE,HERE
|
||
|
SET 'HERE,RM
|
||
|
ZERO? RMBIT /?CCL3
|
||
|
FSET? RM,ONBIT \?CCL3
|
||
|
SET 'LIT,TRUE-VALUE
|
||
|
JUMP ?CND1
|
||
|
?CCL3: PUTB P-MERGE,P-MATCHLEN,0
|
||
|
SET 'P-TABLE,P-MERGE
|
||
|
SET 'P-SLOCBITS,-1
|
||
|
EQUAL? OHERE,RM \?CND6
|
||
|
CALL DO-SL,WINNER,1,1
|
||
|
EQUAL? WINNER,PROTAGONIST /?CND6
|
||
|
IN? PROTAGONIST,RM \?CND6
|
||
|
CALL DO-SL,PROTAGONIST,1,1
|
||
|
?CND6: CALL DO-SL,RM,1,1
|
||
|
GET P-TABLE,P-MATCHLEN
|
||
|
GRTR? STACK,0 \?CND1
|
||
|
SET 'LIT,TRUE-VALUE
|
||
|
?CND1: SET 'HERE,OHERE
|
||
|
SET 'P-GWIMBIT,0
|
||
|
RETURN LIT
|
||
|
|
||
|
|
||
|
.FUNCT PRSO-PRINT,PTR
|
||
|
ZERO? P-MERGED \?CTR2
|
||
|
GET P-ITBL,P-NC1 >PTR
|
||
|
GET PTR,0
|
||
|
EQUAL? STACK,W?IT \?CCL3
|
||
|
?CTR2: PRINTC 32
|
||
|
PRINTD PRSO
|
||
|
RTRUE
|
||
|
?CCL3: GET P-ITBL,P-NC1L
|
||
|
CALL BUFFER-PRINT,PTR,STACK,FALSE-VALUE
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT PRSI-PRINT,PTR
|
||
|
ZERO? P-MERGED \?CTR2
|
||
|
GET P-ITBL,P-NC2 >PTR
|
||
|
GET PTR,0
|
||
|
EQUAL? STACK,W?IT \?CCL3
|
||
|
?CTR2: PRINTC 32
|
||
|
PRINTD PRSI
|
||
|
RTRUE
|
||
|
?CCL3: GET P-ITBL,P-NC2L
|
||
|
CALL BUFFER-PRINT,PTR,STACK,FALSE-VALUE
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT THIS-IT?,OBJ,SYNS,?TMP1
|
||
|
FSET? OBJ,INVISIBLE /FALSE
|
||
|
ZERO? P-NAM /?CCL5
|
||
|
GETPT OBJ,P?SYNONYM >SYNS
|
||
|
PTSIZE SYNS
|
||
|
DIV STACK,2
|
||
|
SUB STACK,1
|
||
|
CALL ZMEMQ,P-NAM,SYNS,STACK
|
||
|
ZERO? STACK /FALSE
|
||
|
?CCL5: ZERO? P-ADJ /?CCL9
|
||
|
GETPT OBJ,P?ADJECTIVE >SYNS
|
||
|
ZERO? SYNS /FALSE
|
||
|
PTSIZE SYNS
|
||
|
SUB STACK,1
|
||
|
CALL ZMEMQB,P-ADJ,SYNS,STACK
|
||
|
ZERO? STACK /FALSE
|
||
|
?CCL9: ZERO? P-GWIMBIT /TRUE
|
||
|
FSET? OBJ,P-GWIMBIT /TRUE
|
||
|
RFALSE
|
||
|
|
||
|
.ENDI
|