.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