zorkzero/top.zap
historicalsource 8b3579aab4 Release 296
2019-04-16 09:52:54 -04:00

625 lines
13 KiB
Plaintext

.SEGMENT "0"
.FUNCT MORE-SPECIFIC
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTR "[Please be more specific.]"
.FUNCT MAIN-LOOP,X
?PRG1: CALL1 MAIN-LOOP-1 >X
JUMP ?PRG1
.FUNCT DIR-VERB-PRSI?,NP
GET PARSE-RESULT,4
EQUAL? STACK,V?MOVE-DIR,V?RIDE-DIR,V?ROLL-DIR /?PRD3
GET PARSE-RESULT,4
EQUAL? STACK,V?SET-DIR \FALSE
?PRD3: GET NP,3
EQUAL? STACK,INTDIR,LEFT-RIGHT /FALSE
RTRUE
.FUNCT DIR-VERB-WORD?,WD
EQUAL? WD,W?WALK,W?GO,W?RUN /TRUE
RFALSE
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,OBJ,V,OBJ1,NP,NP1,CNT,TOFF,XX,TMP
CALL1 PARSER >P-WON
ZERO? P-WON /?CCL3
DLESS? 'P-ERRS,0 \?PRG6
SET 'P-ERRS,0
?PRG6: GET PARSE-RESULT,4 >PRSA
EQUAL? PRSA,V?UNDO \?CCL10
CALL2 PERFORM,PRSA
RSTACK
?CCL10: ISAVE >P-CAN-UNDO
EQUAL? P-CAN-UNDO,2 \?CND8
EQUAL? PRSA,V?SAVE \?CCL15
ICALL1 CANT-UNDO
RFALSE
?CCL15: SET 'P-CONT,-1
ICALL1 V-$REFRESH
RFALSE
?CND8: GET PARSE-RESULT,5 >P-PRSO
GET PARSE-RESULT,6 >P-PRSI
ZERO? P-PRSO /?CCL19
GET P-PRSO,3
EQUAL? INTDIR,STACK \?CCL19
GET P-PRSO,4
GET STACK,2
GETB STACK,6 >P-DIRECTION
JUMP ?CND17
?CCL19: ZERO? P-PRSI /?CND17
GET P-PRSI,3
EQUAL? INTDIR,STACK \?CND17
GET P-PRSI,4
GET STACK,2
GETB STACK,6 >P-DIRECTION
?CND17: GET PARSE-RESULT,1 >P-PRSA-WORD
SET 'CLOCK-WAIT,FALSE-VALUE
SET 'ICNT,0
SET 'OCNT,0
ZERO? P-PRSI /?CND25
GET P-PRSI,1 >ICNT
ZERO? ICNT /?CND25
SET 'P-MULT,ICNT
?CND25: ZERO? P-PRSO /?CND29
GET P-PRSO,1 >OCNT
ZERO? OCNT /?CND29
SET 'P-MULT,OCNT
?CND29: ZERO? OCNT \?CCL35
ZERO? ICNT /?CND33
?CCL35: EQUAL? PRSA,V?WALK /?CND33
ZERO? P-IT-OBJECT /?CND33
CALL2 ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND33
ZERO? ICNT /?CND42
SET 'CNT,0
?PRG44: MUL CNT,2
ADD NOUN-PHRASE-HEADER-LEN,STACK >TOFF
GET P-PRSI,TOFF
EQUAL? IT,STACK \?CCL48
PUT P-PRSI,TOFF,P-IT-OBJECT
ICALL TELL-PRONOUN,P-IT-OBJECT,IT
JUMP ?CND42
?CCL48: IGRTR? 'CNT,ICNT \?PRG44
?CND42: ZERO? OCNT /?CND33
SET 'CNT,0
?PRG52: MUL CNT,2
ADD NOUN-PHRASE-HEADER-LEN,STACK >TOFF
GET P-PRSO,TOFF
EQUAL? IT,STACK \?CCL56
PUT P-PRSO,TOFF,P-IT-OBJECT
ICALL TELL-PRONOUN,P-IT-OBJECT,IT
JUMP ?CND33
?CCL56: IGRTR? 'CNT,OCNT \?PRG52
?CND33: ZERO? OCNT \?CCL60
SET 'NUM,OCNT
JUMP ?CND58
?CCL60: GRTR? OCNT,1 \?CCL62
ZERO? ICNT \?CCL65
SET 'OBJ,FALSE-VALUE
JUMP ?CND63
?CCL65: GET P-PRSI,3 >OBJ
GET P-PRSI,4 >NP
?CND63: SET 'NUM,OCNT
JUMP ?CND58
?CCL62: GRTR? ICNT,1 \?CCL69
GET P-PRSO,3 >OBJ
GET P-PRSI,4 >NP
SET 'NUM,ICNT
JUMP ?CND58
?CCL69: SET 'NUM,1
?CND58: ZERO? OBJ \?CND72
EQUAL? ICNT,1 \?CND72
GET P-PRSI,3 >OBJ
GET P-PRSI,4 >NP
?CND72: ZERO? LIT \?CCL80
CALL1 SEE-VERB?
ZERO? STACK /?CCL80
ICALL1 TELL-TOO-DARK
SET 'P-CONT,-1
JUMP ?CND78
?CCL80: EQUAL? PRSA,V?WALK \?CCL84
ZERO? P-WALK-DIR /?PRD87
PUSH P-WALK-DIR
JUMP ?PEN85
?PRD87: GET P-PRSO,3
?PEN85: CALL PERFORM,PRSA,STACK >V
JUMP ?CND78
?CCL84: ZERO? NUM \?CCL89
CALL2 PERFORM,PRSA >V
SET 'PRSO,FALSE-VALUE
SET 'PRSO-NP,FALSE-VALUE
JUMP ?CND78
?CCL89: GRTR? OCNT,1 \?CCL91
EQUAL? PRSA,V?COUNT \?CCL91
CALL PERFORM,PRSA,ROOMS >V
JUMP ?CND78
?CCL91: SET 'CNT,-1
SET 'TMP,0
?PRG94: INC 'CNT
LESS? CNT,NUM /?CND96
ZERO? TMP \?CND78
ICALL1 MORE-SPECIFIC
JUMP ?CND78
?CND96: GRTR? ICNT,1 /?CCL102
MUL CNT,2
ADD STACK,NOUN-PHRASE-HEADER-LEN
GET P-PRSO,STACK >OBJ1
MUL CNT,2
ADD STACK,4
GET P-PRSO,STACK >NP1
JUMP ?CND100
?CCL102: MUL CNT,2
ADD STACK,NOUN-PHRASE-HEADER-LEN
GET P-PRSI,STACK >OBJ1
MUL CNT,2
ADD STACK,4
GET P-PRSI,STACK >NP1
?CND100: GRTR? NUM,1 /?CCL108
GET NP1,3
EQUAL? STACK,NP-QUANT-ALL \?CND107
?CCL108: EQUAL? OBJ1,FALSE-VALUE,NOT-HERE-OBJECT \?CCL113
ICALL2 NP-PRINT,NP1
PRINTI ": "
ICALL2 NP-CANT-SEE,NP1
JUMP ?PRG94
?CCL113: GET NP1,3
EQUAL? STACK,NP-QUANT-ALL \?CCL115
CALL VERB-ALL-TEST,OBJ1,OBJ
ZERO? STACK /?PRG94
?CCL115: CALL2 ACCESSIBLE?,OBJ1
ZERO? STACK /?PRG94
EQUAL? OBJ1,PLAYER /?PRG94
EQUAL? OBJ1,IT \?CCL124
ICALL2 DPRINT,P-IT-OBJECT
JUMP ?CND122
?CCL124: ICALL2 DPRINT,OBJ1
?CND122: PRINTI ": "
?CND107: SET 'TMP,TRUE-VALUE
GRTR? ICNT,1 /?CCL127
SET 'PRSO,OBJ1
SET 'PRSO-NP,NP1
SET 'PRSI,OBJ
SET 'PRSI-NP,NP
JUMP ?CND125
?CCL127: SET 'PRSO,OBJ
SET 'PRSO-NP,NP
SET 'PRSI,OBJ1
SET 'PRSI-NP,NP1
?CND125: EQUAL? IT,PRSI,PRSO \?CND128
CALL FIX-HIM-HER-IT,IT,P-IT-OBJECT
ZERO? STACK /?PRG94
?CND128: EQUAL? HER,PRSI,PRSO \?CND132
CALL FIX-HIM-HER-IT,HER,P-HER-OBJECT
ZERO? STACK /?PRG94
?CND132: EQUAL? HIM,PRSI,PRSO \?CND136
CALL FIX-HIM-HER-IT,HIM,P-HIM-OBJECT
ZERO? STACK /?PRG94
?CND136: ICALL2 QCONTEXT-CHECK,PRSO
GET PARSE-RESULT,3
GETB STACK,5 >XX
ZERO? PRSO /?CND140
BTST XX,128 /?CND140
BTST XX,192 /?CND140
CALL2 META-LOC,PRSO >V
ZERO? V /?CND140
IN? V,ROOMS \?CND140
CALL2 META-LOC,WINNER
CALL GLOBAL-IN?,PRSO,STACK
ZERO? STACK \?CND140
CALL2 META-LOC,WINNER
EQUAL? V,STACK /?CND140
ICALL2 NOT-HERE,PRSO
JUMP ?PRG94
?CND140: ZERO? PRSO /?CND149
BAND 96,XX
ZERO? STACK /?CND149
BTST XX,128 /?CND149
CALL ITAKE-CHECK,PRSO,XX >V
EQUAL? M-FATAL,V /?CND78
ZERO? V \?PRG94
?CND149: ZERO? PRSI /?CND159
GET PARSE-RESULT,3
GETB STACK,9 >XX
BAND 96,XX
ZERO? STACK /?CND159
BTST XX,128 /?CND159
CALL ITAKE-CHECK,PRSI,XX >V
EQUAL? M-FATAL,V /?CND78
ZERO? V \?PRG94
?CND159: CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? M-FATAL,V /?CND78
EQUAL? P-CONT,-1 \?PRG94
?CND78: SET 'OPRSO,PRSO
ZERO? CLOCK-WAIT \?CND173
CALL1 GAME-VERB?
ZERO? STACK \?CND173
LOC WINNER >V
ZERO? V /?CND177
IN? V,ROOMS /?CND177
GETP V,P?ACTION
CALL D-APPLY,STR?16,STACK,M-END >V
?CND177: GETP HERE,P?ACTION
CALL D-APPLY,STR?16,STACK,M-END >V
?CND173: EQUAL? M-FATAL,V \?CND181
SET 'P-CONT,-1
?CND181: ZERO? CLOCK-WAIT \?CND183
CALL1 GAME-VERB?
ZERO? STACK \?CND183
SET 'CLOCKER-RUNNING,1
CALL1 CLOCKER >V
SET 'CLOCKER-RUNNING,2
EQUAL? M-FATAL,V \?CND183
SET 'P-CONT,-1
?CND183: GET PARSE-RESULT,12 >V
ZERO? V /?CND1
GET V,1
LESS? 1,STACK \?CND1
EQUAL? P-CONT,-1 /?CND1
CALL2 HACK-TELL-1,V >V
EQUAL? M-FATAL,V \?CCL196
SET 'P-CONT,-1
JUMP ?CND1
?CCL196: ZERO? V /?CND1
JUMP ?PRG6
?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE
SET 'P-CONT,FALSE-VALUE
?CND1: SET 'PRSA,FALSE-VALUE
SET 'PRSO,FALSE-VALUE
SET 'PRSO-NP,FALSE-VALUE
SET 'PRSI,FALSE-VALUE
RETURN PRSI
.FUNCT FIX-HIM-HER-IT,PRON,OBJ
ZERO? OBJ \?CCL3
ICALL1 MORE-SPECIFIC
RFALSE
?CCL3: CALL2 VISIBLE?,OBJ
ZERO? STACK \?CCL5
ICALL2 NOT-HERE,OBJ
RFALSE
?CCL5: EQUAL? PRSO,PRON \?CND6
SET 'PRSO,OBJ
ICALL TELL-PRONOUN,OBJ,PRON
?CND6: EQUAL? PRSI,PRON \TRUE
SET 'PRSI,OBJ
ICALL TELL-PRONOUN,OBJ,PRON
RTRUE
.FUNCT TELL-PRONOUN,OBJ,PRON
FSET? PRON,TOUCHBIT /FALSE
EQUAL? OPRSO,OBJ /FALSE
PRINTI "["""
ICALL2 DPRINT,PRON
PRINTI """ meaning "
ICALL2 TELL-THE,OBJ
PRINTR "]"
.FUNCT FIND-A-WINNER,RM,OTHER,WHO,N
ASSIGNED? 'RM /?CND1
SET 'RM,HERE
?CND1: ZERO? QCONTEXT /?CCL5
IN? QCONTEXT,RM \?CCL5
RETURN QCONTEXT
?CCL5: FIRST? RM >OTHER /?BOGUS8
?BOGUS8: SET 'WHO,FALSE-VALUE
?PRG9: ZERO? OTHER \?CCL13
RETURN WHO
?CCL13: FSET? OTHER,PERSONBIT \?CND11
FSET? OTHER,INVISIBLE /?CND11
EQUAL? OTHER,PLAYER /?CND11
IGRTR? 'N,1 /FALSE
SET 'WHO,OTHER
?CND11: NEXT? OTHER >OTHER /?PRG9
JUMP ?PRG9
.FUNCT QCONTEXT-CHECK,PER,WHO
EQUAL? PRSA,V?TELL-ABOUT,V?SHOW \FALSE
EQUAL? PER,PLAYER \FALSE
CALL2 FIND-A-WINNER,HERE >WHO
ZERO? WHO /?CND7
SET 'QCONTEXT,WHO
?CND7: CALL1 QCONTEXT-GOOD?
ZERO? STACK /FALSE
EQUAL? WINNER,PLAYER \FALSE
SET 'WINNER,QCONTEXT
ICALL2 TELL-SAID-TO,QCONTEXT
RTRUE
.FUNCT TELL-SAID-TO,PER
PRINTI "[said to "
ICALL2 DPRINT,PER
PRINTR "]"
.FUNCT QCONTEXT-GOOD?
ZERO? QCONTEXT /FALSE
FSET? QCONTEXT,PERSONBIT \FALSE
CALL2 META-LOC,QCONTEXT
EQUAL? HERE,STACK \FALSE
RETURN QCONTEXT
.FUNCT META-LOC,OBJ,INV,L
LOC OBJ >L
?PRG1: EQUAL? FALSE-VALUE,OBJ,L /FALSE
EQUAL? L,LOCAL-GLOBALS,GLOBAL-OBJECTS,GENERIC-OBJECTS \?CCL7
RETURN L
?CCL7: IN? OBJ,ROOMS \?CCL9
RETURN OBJ
?CCL9: ZERO? INV /?CND10
FSET? OBJ,INVISIBLE /FALSE
?CND10: SET 'OBJ,L
LOC OBJ >L
JUMP ?PRG1
.FUNCT CANT-UNDO
PRINTR "[I can't undo that now.]"
.FUNCT NOT-HERE-VERB?,V
EQUAL? V,V?WALK-TO,V?RESEARCH /TRUE
RFALSE
.FUNCT SEE-VERB?
EQUAL? PRSA,V?SEARCH,V?READ,V?LOOK-UNDER /TRUE
EQUAL? PRSA,V?LOOK-INSIDE,V?LOOK-DOWN,V?LOOK-BEHIND /TRUE
EQUAL? PRSA,V?LOOK,V?TAKE,V?FIND /TRUE
EQUAL? PRSA,V?EXAMINE,V?COUNT,V?CHASTISE /TRUE
RFALSE
.FUNCT PERFORM,PA,PO,PI,V,OA,OO,OI,OQ,OS,X
SET 'OA,PRSA
SET 'OO,PRSO
SET 'OI,PRSI
ZERO? OO /?CCL3
EQUAL? OO,PI \?CCL3
SET 'OBJ-SWAP,TRUE-VALUE
JUMP ?CND1
?CCL3: ZERO? OI /?CCL7
EQUAL? OI,PO \?CCL7
SET 'OBJ-SWAP,TRUE-VALUE
JUMP ?CND1
?CCL7: SET 'OBJ-SWAP,FALSE-VALUE
?CND1: SET 'PRSA,PA
SET 'PRSI,PI
SET 'PRSO,PO
SET 'V,FALSE-VALUE
ZERO? PRSI /?CND10
ICALL2 THIS-IS-IT,PRSI
?CND10: ZERO? PRSO /?CND12
EQUAL? PRSA,V?WALK /?CND12
ICALL2 THIS-IS-IT,PRSO
?CND12: EQUAL? WINNER,PLAYER /?CND16
ICALL2 THIS-IS-IT,WINNER
?CND16: SET 'PO,PRSO
SET 'PI,PRSI
EQUAL? PRSA,V?STOUCH,V?SWRAP /?CND18
EQUAL? PRSA,V?STHROW,V?SSHOW,V?SPUT-ON /?CND18
EQUAL? PRSA,V?SSEARCH-OBJECT-FOR,V?SRIDE-DIR,V?ASK-ABOUT /?CND18
GETP WINNER,P?ACTION
CALL D-APPLY,STR?17,STACK,M-WINNER >V
?CND18: ZERO? V \?CND24
LOC WINNER
IN? STACK,ROOMS /?CND24
LOC WINNER
GETP STACK,P?ACTION
CALL D-APPLY,STR?18,STACK,M-BEG >V
?CND24: ZERO? V \?CND28
GETP HERE,P?ACTION
CALL D-APPLY,STR?18,STACK,M-BEG >V
?CND28: ZERO? V \?CND30
GET PREACTIONS,PA
CALL D-APPLY,STR?19,STACK >V
?CND30: SET 'NOW-PRSI,1
ZERO? V \?CND33
ZERO? PI /?CND33
EQUAL? PRSA,V?WALK /?CND33
LOC PI
ZERO? STACK /?CND33
LOC PI
GETP STACK,P?CONTFCN >V
ZERO? V /?CND33
CALL D-APPLY,STR?20,V,M-CONTAINER >V
?CND33: ZERO? V \?CND41
ZERO? PI /?CND41
EQUAL? PI,GLOBAL-HERE \?CND45
GETP HERE,P?ACTION
CALL D-APPLY,STR?21,STACK >V
?CND45: ZERO? V \?CND41
GETP PI,P?ACTION
CALL D-APPLY,STR?21,STACK >V
?CND41: SET 'NOW-PRSI,0
ZERO? V \?CND49
ZERO? PO /?CND49
EQUAL? PRSA,V?WALK /?CND49
LOC PO
ZERO? STACK /?CND49
LOC PO
GETP STACK,P?CONTFCN >V
ZERO? V /?CND49
CALL D-APPLY,STR?20,V,M-CONTAINER >V
?CND49: ZERO? V \?CND57
ZERO? PO /?CND57
EQUAL? PRSA,V?WALK /?CND57
EQUAL? PO,GLOBAL-HERE \?CND62
GETP HERE,P?ACTION
CALL D-APPLY,STR?22,STACK >V
?CND62: ZERO? V \?CND57
GETP PO,P?ACTION
CALL D-APPLY,STR?22,STACK >V
?CND57: ZERO? V \?CND66
GET ACTIONS,PA
CALL D-APPLY,FALSE-VALUE,STACK >V
?CND66: EQUAL? M-FATAL,V \?CND69
SET 'P-CONT,-1
?CND69: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.FUNCT TELL-TOO-DARK
SET 'P-CONT,-1
PRINT TOO-DARK
EQUAL? PRSA,V?LOOK \?CCL3
CALL1 GRUE-PIT-WARNING
RSTACK
?CCL3: CRLF
RTRUE
.FUNCT ITAKE-CHECK,OBJ,BITS,TAKEN
EQUAL? OBJ,IT \?CND1
SET 'OBJ,P-IT-OBJECT
?CND1: CALL HELD?,OBJ,WINNER
ZERO? STACK \FALSE
EQUAL? OBJ,HANDS,ROOMS /FALSE
FSET? OBJ,TRYTAKEBIT /?CND8
EQUAL? WINNER,PLAYER /?CCL12
SET 'TAKEN,TRUE-VALUE
JUMP ?CND8
?CCL12: BTST BITS,32 \?CND8
CALL ITAKE,FALSE-VALUE,OBJ
EQUAL? STACK,TRUE-VALUE \?CND8
SET 'TAKEN,TRUE-VALUE
?CND8: ZERO? TAKEN \FALSE
BTST BITS,64 \FALSE
BTST BITS,128 /FALSE
PRINTC 91
EQUAL? WINNER,PLAYER \?CCL24
PRINTI "You are"
JUMP ?CND22
?CCL24: ICALL2 TELL-CTHE,WINNER
PRINTI " is"
?CND22: PRINTI "n't holding "
ICALL2 TELL-THE,OBJ
ICALL2 THIS-IS-IT,OBJ
PRINTR "!]"
.FUNCT D-APPLY,STR,FCN,FOO,RES
ZERO? FCN /FALSE
ZERO? FOO /?CCL6
CALL FCN,FOO >RES
RETURN RES
?CCL6: CALL FCN >RES
RETURN RES
.FUNCT NOT-HERE,OBJ,CLOCK
ZERO? CLOCK \?CND1
SET 'CLOCK-WAIT,TRUE-VALUE
PRINTI "[But"
?CND1: PRINTC 32
ICALL2 TELL-THE,OBJ
PRINTI " isn't "
CALL2 VISIBLE?,OBJ
ZERO? STACK /?CCL5
PRINTI "close enough"
CALL1 SPEAKING-VERB?
ZERO? STACK /?CND6
PRINTI " to hear you"
?CND6: PRINTC 46
JUMP ?CND3
?CCL5: PRINTI "here!"
?CND3: ICALL2 THIS-IS-IT,OBJ
ZERO? CLOCK \?CND8
PRINTC 93
?CND8: CRLF
RTRUE
.FUNCT SPEAKING-VERB?,A
ASSIGNED? 'A /?CND1
SET 'A,PRSA
?CND1: EQUAL? A,V?ASK-ABOUT,V?ASK-FOR,V?HELLO /TRUE
EQUAL? A,V?NO,V?TELL,V?TELL-ABOUT /TRUE
EQUAL? A,V?YES /TRUE
RFALSE
.FUNCT GET-OWNER,OBJ,TMP,NP
CALL2 GET-NP,OBJ >NP
ZERO? NP /FALSE
GET NP,4 >TMP
ZERO? TMP \?CTR5
GET NP,1 >TMP
ZERO? TMP /?CCL6
GET TMP,2 >TMP
ZERO? TMP /?CCL6
?CTR5: LESS? 0,TMP \FALSE
GRTR? TMP,LAST-OBJECT /FALSE
RETURN TMP
?CCL6: GETP OBJ,P?OWNER >TMP
ZERO? TMP /FALSE
LESS? 0,TMP \?CCL17
GRTR? TMP,LAST-OBJECT \FALSE
?CCL17: RETURN PLAYER
.FUNCT GET-NP,OBJ,PRSI?
SET 'PRSI?,NOW-PRSI
EQUAL? OBJ,PRSO,PRSI \FALSE
ZERO? OBJ /?CND1
EQUAL? OBJ,PRSO \?CCL7
SET 'PRSI?,FALSE-VALUE
JUMP ?CND1
?CCL7: SET 'PRSI?,TRUE-VALUE
?CND1: ZERO? OBJ-SWAP /?CCL10
ZERO? PRSI? /?CCL13
RETURN PRSO-NP
?CCL13: RETURN PRSI-NP
?CCL10: ZERO? PRSI? /?CCL15
RETURN PRSI-NP
?CCL15: RETURN PRSO-NP
.FUNCT NOUN-USED?,OBJ,WD1,WD2,WD3,X
CALL2 GET-NP,OBJ >X
ZERO? X /FALSE
GET X,2 >X
ZERO? X /FALSE
EQUAL? X,WD1,WD2,WD3 /TRUE
RFALSE
.FUNCT ADJ-USED?,OBJ,WD1,WD2,WD3,NP,CT
CALL2 GET-NP,OBJ >NP
ZERO? NP /FALSE
GET NP,1 >NP
ZERO? NP /FALSE
GET NP,2
EQUAL? PLAYER,STACK \?CCL8
EQUAL? W?MY,WD1,WD2,WD3 \?CCL8
RETURN W?MY
?CCL8: GET NP,4 >CT
GRTR? CT,0 \FALSE
ADD NP,10 >NP
INTBL? WD1,NP,CT \?CCL15
RETURN WD1
?CCL15: ZERO? WD2 /FALSE
INTBL? WD2,NP,CT \?CCL20
RETURN WD2
?CCL20: ZERO? WD3 /FALSE
INTBL? WD3,NP,CT \FALSE
RETURN WD3
.ENDSEG
.ENDI