.FUNCT PARSER:ANY:0:0,PTR,WRD,VAL,VERB,OF-FLAG,OWINNER,OMERGED,LEN,DIR,NW,LW,CNT,?TMP2,?TMP1 SET 'PTR,P-LEXSTART SET 'CNT,-1 ?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 'OWINNER,WINNER SET 'OMERGED,P-MERGED SET 'P-ADVERB,FALSE-VALUE SET 'P-MERGED,FALSE-VALUE SET 'P-END-ON-PREP,FALSE-VALUE PUT P-PRSO,P-MATCHLEN,0 PUT P-PRSI,P-MATCHLEN,0 PUT P-BUTS,P-MATCHLEN,0 ZERO? QUOTE-FLAG \?CND8 EQUAL? WINNER,PLAYER /?CND8 SET 'WINNER,PLAYER CALL2 META-LOC,PLAYER >HERE CALL2 LIT?,HERE >LIT ?CND8: ZERO? RESERVE-PTR /?CCL14 SET 'PTR,RESERVE-PTR ICALL STUFF,RESERVE-LEXV,P-LEXV ZERO? SUPER-BRIEF \?CND15 EQUAL? PLAYER,WINNER \?CND15 CRLF ?CND15: SET 'RESERVE-PTR,FALSE-VALUE SET 'P-CONT,FALSE-VALUE JUMP ?CND12 ?CCL14: ZERO? P-CONT /?CCL20 SET 'PTR,P-CONT ZERO? SUPER-BRIEF \?CND21 EQUAL? PLAYER,WINNER \?CND21 EQUAL? PRSA,V?SAY /?CND21 CRLF ?CND21: SET 'P-CONT,FALSE-VALUE JUMP ?CND12 ?CCL20: SET 'WINNER,PLAYER SET 'QUOTE-FLAG,FALSE-VALUE LOC WINNER FSET? STACK,VEHBIT /?CND26 LOC WINNER >HERE ?CND26: CALL2 LIT?,HERE >LIT ZERO? SUPER-BRIEF \?PRG30 CRLF ?PRG30: ICALL1 UPDATE-STATUS-LINE PRINTC 62 PUTB P-INBUF,1,0 READ P-INBUF,P-LEXV ?CND12: GETB P-LEXV,P-LEXWORDS >P-LEN ZERO? P-LEN \?CND32 PRINTI "Bitte?" CRLF RFALSE ?CND32: GET P-LEXV,PTR >WRD EQUAL? WRD,W?ACH \?CCL36 ADD PTR,P-LEXELEN GET P-LEXV,STACK EQUAL? STACK,W?PERIOD,W?COMMA \?CND37 ADD PTR,P-LEXELEN >PTR DEC 'P-LEN ?CND37: GRTR? P-LEN,1 /?CCL41 PRINTI "Das war tolpatschig." CRLF RFALSE ?CCL41: GET OOPS-TABLE,O-PTR ZERO? STACK /?CCL43 GRTR? P-LEN,2 \?CCL46 ADD PTR,P-LEXELEN GET P-LEXV,STACK EQUAL? STACK,W?QUOTE \?CCL46 PRINTI "Es tut mir leid, aber Fehler im vorgegebenen Text lassen sich nicht korrigieren." CRLF RFALSE ?CCL46: GRTR? P-LEN,2 \?CND44 PRINTI "Warnung: nur das erste Wort nach ACH kann gelten." CRLF ?CND44: GET OOPS-TABLE,O-PTR >?TMP1 ADD PTR,P-LEXELEN GET P-LEXV,STACK PUT AGAIN-LEXV,?TMP1,STACK SET 'WINNER,OWINNER MUL PTR,P-LEXELEN ADD STACK,6 GETB P-LEXV,STACK >?TMP2 MUL PTR,P-LEXELEN ADD STACK,7 GETB P-LEXV,STACK >?TMP1 GET OOPS-TABLE,O-PTR MUL STACK,P-LEXELEN ADD STACK,3 ICALL INBUF-ADD,?TMP2,?TMP1,STACK ICALL STUFF,AGAIN-LEXV,P-LEXV GETB P-LEXV,P-LEXWORDS >P-LEN GET OOPS-TABLE,O-START >PTR ICALL INBUF-STUFF,OOPS-INBUF,P-INBUF JUMP ?CND34 ?CCL43: PUT OOPS-TABLE,O-END,FALSE-VALUE PRINTI "Hier gab es kein Wort zu ersetzen!" CRLF RFALSE ?CCL36: EQUAL? WRD,W?WIEDER /?CND50 SET 'P-NUMBER,0 ?CND50: PUT OOPS-TABLE,O-END,FALSE-VALUE ?CND34: GET P-LEXV,PTR EQUAL? STACK,W?WIEDER \?CCL54 GETB OOPS-INBUF,1 ZERO? STACK \?CCL57 PRINTI "Bitte?" CRLF RFALSE ?CCL57: ZERO? P-OFLAG /?CCL59 PRINTI "Gespr%achsfetzen wiederholen ist schwierig." CRLF RFALSE ?CCL59: ZERO? P-WON \?CCL61 PRINTI "Das w%urde den Fehler nur wiederholen." CRLF RFALSE ?CCL61: GRTR? P-LEN,1 \?CCL63 ADD PTR,P-LEXELEN GET P-LEXV,STACK EQUAL? STACK,W?PERIOD,W?COMMA,W?DANN /?CTR65 ADD PTR,P-LEXELEN GET P-LEXV,STACK EQUAL? STACK,W?UND \?CCL66 ?CTR65: ADD PTR,4 >PTR GETB P-LEXV,P-LEXWORDS SUB STACK,2 PUTB P-LEXV,P-LEXWORDS,STACK JUMP ?CND55 ?CCL66: PRINTI "Dieser Satz ist nicht verstanden worden." CRLF RFALSE ?CCL63: ADD PTR,P-LEXELEN >PTR GETB P-LEXV,P-LEXWORDS SUB STACK,1 PUTB P-LEXV,P-LEXWORDS,STACK ?CND55: GETB P-LEXV,P-LEXWORDS GRTR? STACK,0 \?CCL71 ICALL STUFF,P-LEXV,RESERVE-LEXV SET 'RESERVE-PTR,PTR JUMP ?CND69 ?CCL71: SET 'RESERVE-PTR,FALSE-VALUE ?CND69: SET 'WINNER,OWINNER SET 'P-MERGED,OMERGED ICALL INBUF-STUFF,OOPS-INBUF,P-INBUF ICALL STUFF,AGAIN-LEXV,P-LEXV SET 'CNT,-1 SET 'DIR,AGAIN-DIR ?PRG72: IGRTR? 'CNT,P-ITBLLEN /?CND52 GET P-OTBL,CNT PUT P-ITBL,CNT,STACK JUMP ?PRG72 ?CCL54: ICALL STUFF,P-LEXV,AGAIN-LEXV ICALL INBUF-STUFF,P-INBUF,OOPS-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-DIR,FALSE-VALUE SET 'P-NCN,0 SET 'P-GETFLAGS,0 ?PRG77: DLESS? 'P-LEN,0 \?CCL81 SET 'QUOTE-FLAG,FALSE-VALUE JUMP ?CND52 ?CCL81: GET P-LEXV,PTR >WRD ZERO? WRD \?CTR82 CALL2 NUMBER?,PTR >WRD ZERO? WRD /?CCL83 ?CTR82: ZERO? P-LEN \?CCL88 SET 'NW,0 JUMP ?CND86 ?CCL88: ADD PTR,P-LEXELEN GET P-LEXV,STACK >NW ?CND86: EQUAL? WRD,W?ZU \?CCL91 EQUAL? VERB,ACT?SAG \?CCL91 SET 'WRD,W?QUOTE JUMP ?CND89 ?CCL91: EQUAL? WRD,W?DANN \?CND89 GRTR? P-LEN,0 \?CND89 ZERO? VERB \?CND89 ZERO? QUOTE-FLAG \?CND89 EQUAL? LW,0,W?PERIOD \?CCL101 SET 'WRD,W?DER JUMP ?CND89 ?CCL101: PUT P-ITBL,P-VERB,ACT?SAG PUT P-ITBL,P-VERBN,0 SET 'WRD,W?QUOTE ?CND89: EQUAL? WRD,W?DANN,W?PERIOD,W?QUOTE \?CCL104 EQUAL? WRD,W?QUOTE \?CND105 ZERO? QUOTE-FLAG /?CCL109 SET 'QUOTE-FLAG,FALSE-VALUE JUMP ?CND105 ?CCL109: SET 'QUOTE-FLAG,TRUE-VALUE ?CND105: ZERO? P-LEN /?PEN110 ADD PTR,P-LEXELEN >P-CONT ?PEN110: PUTB P-LEXV,P-LEXWORDS,P-LEN JUMP ?CND52 ?CCL104: CALL WT?,WRD,16,3 >VAL ZERO? VAL /?CCL113 EQUAL? VERB,FALSE-VALUE,ACT?GEH \?CCL113 EQUAL? LEN,1 /?CTR112 EQUAL? LEN,2 \?PRD119 EQUAL? VERB,ACT?GEH /?CTR112 ?PRD119: EQUAL? NW,W?DANN,W?PERIOD,W?QUOTE \?PRD122 LESS? LEN,2 \?CTR112 ?PRD122: ZERO? QUOTE-FLAG /?PRD125 EQUAL? LEN,2 \?PRD125 EQUAL? NW,W?QUOTE /?CTR112 ?PRD125: GRTR? LEN,2 \?CCL113 EQUAL? NW,W?COMMA,W?UND \?CCL113 ?CTR112: SET 'DIR,VAL EQUAL? NW,W?COMMA,W?UND \?CND131 ADD PTR,P-LEXELEN PUT P-LEXV,STACK,W?DANN ?CND131: GRTR? LEN,2 /?CND79 SET 'QUOTE-FLAG,FALSE-VALUE JUMP ?CND52 ?CCL113: CALL WT?,WRD,64,1 >VAL ZERO? VAL /?CCL136 ZERO? VERB \?CCL136 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 ?CND79 ?CCL136: CALL WT?,WRD,8,0 >VAL ZERO? VAL \?CTR139 EQUAL? WRD,W?ALLES /?CTR139 EQUAL? WRD,W?EIN,W?EINE,W?EINER /?CTR139 EQUAL? WRD,W?EINEM,W?EINEN /?CTR139 CALL WT?,WRD,32 ZERO? STACK \?CTR139 CALL WT?,WRD,128 ZERO? STACK /?CCL140 ?CTR139: GRTR? P-LEN,1 \?CCL149 EQUAL? NW,W?VOLL \?CCL149 ZERO? VAL \?CCL149 EQUAL? WRD,W?ALLES /?CCL149 EQUAL? WRD,W?EIN,W?EINE,W?EINER /?CCL149 EQUAL? WRD,W?EINEM,W?EINEN /?CCL149 SET 'OF-FLAG,TRUE-VALUE JUMP ?CND79 ?CCL149: ZERO? VAL /?CCL158 ZERO? P-LEN /?CTR157 EQUAL? NW,W?DANN,W?PERIOD \?CCL158 ?CTR157: SET 'P-END-ON-PREP,TRUE-VALUE LESS? P-NCN,2 \?CND79 PUT P-ITBL,P-PREP1,VAL PUT P-ITBL,P-PREP1N,WRD JUMP ?CND79 ?CCL158: EQUAL? P-NCN,2 \?CCL166 PRINTI "Der Satz hatte zu viele Substantive." CRLF RFALSE ?CCL166: INC 'P-NCN SET 'P-ACT,VERB CALL CLAUSE,PTR,VAL,WRD >PTR ZERO? PTR /FALSE LESS? PTR,0 \?CND79 SET 'QUOTE-FLAG,FALSE-VALUE ?CND52: PUT OOPS-TABLE,O-PTR,FALSE-VALUE ZERO? DIR /?CCL186 SET 'PRSA,V?WALK SET 'PRSO,DIR SET 'P-OFLAG,FALSE-VALUE SET 'P-WALK-DIR,DIR SET 'AGAIN-DIR,DIR RETURN AGAIN-DIR ?CCL140: EQUAL? WRD,W?VOLL \?CCL172 ZERO? OF-FLAG /?CTR174 EQUAL? NW,W?PERIOD,W?DANN \?CCL175 ?CTR174: ICALL2 CANT-USE,PTR RFALSE ?CCL175: SET 'OF-FLAG,FALSE-VALUE ?CND79: SET 'LW,WRD ADD PTR,P-LEXELEN >PTR JUMP ?PRG77 ?CCL172: CALL WT?,WRD,4 ZERO? STACK \?CND79 EQUAL? VERB,ACT?SAG \?CCL180 CALL WT?,WRD,64,1 ZERO? STACK /?CCL180 EQUAL? WINNER,PLAYER \?CCL180 PRINTI "Bitte lies die Anleitung zum Spiel, um die richtige Anrede zu finden, die man f%ur andere Leute oder Biester benutzt." CRLF RFALSE ?CCL180: ICALL2 CANT-USE,PTR RFALSE ?CCL83: ICALL2 UNKNOWN-WORD,PTR RFALSE ?CCL186: ZERO? P-OFLAG /?CND187 ICALL1 ORPHAN-MERGE ?CND187: SET 'P-WALK-DIR,FALSE-VALUE SET 'AGAIN-DIR,FALSE-VALUE CALL1 SYNTAX-CHECK ZERO? STACK /FALSE CALL1 SNARF-OBJECTS ZERO? STACK /FALSE CALL1 MANY-CHECK ZERO? STACK /FALSE CALL1 TAKE-CHECK ZERO? STACK \TRUE RFALSE .FUNCT STUFF:ANY:2:3,SRC,DEST,MAX,PTR,CTR,BPTR ASSIGNED? 'MAX /?CND1 SET 'MAX,29 ?CND1: SET 'PTR,P-LEXSTART SET 'CTR,1 GETB SRC,0 PUTB DEST,0,STACK GETB SRC,1 PUTB DEST,1,STACK ?PRG3: 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 \?PRG3 RTRUE .FUNCT INBUF-STUFF:ANY:2:2,SRC,DEST,CNT GETB SRC,0 SUB STACK,1 >CNT ?PRG1: GETB SRC,CNT PUTB DEST,CNT,STACK DLESS? 'CNT,0 \?PRG1 RTRUE .FUNCT INBUF-ADD:ANY:3:3,LEN,BEG,SLOT,DBEG,CTR,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?:ANY:2:3,PTR,BIT,B1,OFFS,TYP ASSIGNED? 'B1 /?CND1 SET 'B1,5 ?CND1: SET 'OFFS,P-P1OFF 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 /?CND11 INC 'OFFS ?CND11: GETB PTR,OFFS RSTACK .FUNCT CLAUSE:ANY:3:3,PTR,VAL,WRD,OFF,NUM,ANDFLG,FIRST??,NW,LW,?TMP1 SET 'FIRST??,TRUE-VALUE SUB P-NCN,1 MUL STACK,2 >OFF ZERO? VAL /?CCL3 ADD P-PREP1,OFF >NUM PUT P-ITBL,NUM,VAL ADD NUM,1 PUT P-ITBL,STACK,WRD ADD PTR,P-LEXELEN >PTR JUMP ?CND1 ?CCL3: INC 'P-LEN ?CND1: ZERO? P-LEN \?CND4 DEC 'P-NCN RETURN -1 ?CND4: ADD P-NC1,OFF >NUM MUL PTR,2 ADD P-LEXV,STACK PUT P-ITBL,NUM,STACK GET P-LEXV,PTR EQUAL? STACK,W?DER,W?DIE,W?DAS /?CCL7 GET P-LEXV,PTR EQUAL? STACK,W?EIN,W?EINE,W?EINEM /?CCL7 GET P-LEXV,PTR EQUAL? STACK,W?EINEN,W?EINER \?PRG11 ?CCL7: GET P-ITBL,NUM ADD STACK,4 PUT P-ITBL,NUM,STACK ?PRG11: DLESS? 'P-LEN,0 \?CND13 ADD NUM,1 >?TMP1 MUL PTR,2 ADD P-LEXV,STACK PUT P-ITBL,?TMP1,STACK RETURN -1 ?CND13: GET P-LEXV,PTR >WRD ZERO? WRD \?CTR16 CALL2 NUMBER?,PTR >WRD ZERO? WRD /?CCL17 ?CTR16: ZERO? P-LEN \?CCL22 SET 'NW,0 JUMP ?CND20 ?CCL22: ADD PTR,P-LEXELEN GET P-LEXV,STACK >NW ?CND20: EQUAL? WRD,W?UND,W?COMMA \?CCL25 SET 'ANDFLG,TRUE-VALUE JUMP ?CND15 ?CCL25: EQUAL? WRD,W?ALLES /?CTR26 EQUAL? WRD,W?EIN,W?EINE,W?EINER /?CTR26 EQUAL? WRD,W?EINEM,W?EINEN \?CCL27 ?CTR26: EQUAL? NW,W?VOLL \?CND15 DEC 'P-LEN ADD PTR,P-LEXELEN >PTR JUMP ?CND15 ?CCL27: EQUAL? WRD,W?DANN,W?PERIOD /?CTR33 CALL WT?,WRD,8 ZERO? STACK /?CCL34 GET P-ITBL,P-VERB ZERO? STACK /?CCL34 ZERO? FIRST?? \?CCL34 ?CTR33: INC 'P-LEN ADD NUM,1 >?TMP1 MUL PTR,2 ADD P-LEXV,STACK PUT P-ITBL,?TMP1,STACK SUB PTR,P-LEXELEN RSTACK ?CCL34: CALL WT?,WRD,128 ZERO? STACK /?CCL41 GRTR? P-LEN,0 \?CCL44 EQUAL? NW,W?VOLL \?CCL44 EQUAL? WRD,W?ALLES /?CCL44 EQUAL? WRD,W?EIN,W?EINE,W?EINER /?CCL44 EQUAL? WRD,W?EINEM,W?EINEN \?CND15 ?CCL44: CALL WT?,WRD,32 ZERO? STACK /?CCL51 ZERO? NW /?CCL51 CALL WT?,NW,128 ZERO? STACK \?CND15 ?CCL51: ZERO? ANDFLG \?CCL56 EQUAL? NW,W?ABER,W?AUSSER,W?AU%SER /?CCL56 EQUAL? NW,W?UND,W?COMMA /?CCL56 ADD NUM,1 >?TMP1 ADD PTR,2 MUL STACK,2 ADD P-LEXV,STACK PUT P-ITBL,?TMP1,STACK RETURN PTR ?CCL56: SET 'ANDFLG,FALSE-VALUE JUMP ?CND15 ?CCL41: ZERO? P-MERGED \?PRD62 ZERO? P-OFLAG \?PRD62 GET P-ITBL,P-VERB ZERO? STACK /?CCL60 ?PRD62: CALL WT?,WRD,32 ZERO? STACK \?CND15 CALL WT?,WRD,4 ZERO? STACK \?CND15 ?CCL60: ZERO? ANDFLG /?CCL69 CALL WT?,WRD,16 ZERO? STACK \?CTR68 CALL WT?,WRD,64 ZERO? STACK /?CCL69 ?CTR68: SUB PTR,4 >PTR ADD PTR,2 PUT P-LEXV,STACK,W?DANN ADD P-LEN,2 >P-LEN ?CND15: SET 'LW,WRD SET 'FIRST??,FALSE-VALUE ADD PTR,P-LEXELEN >PTR JUMP ?PRG11 ?CCL69: CALL WT?,WRD,8 ZERO? STACK \?CND15 ICALL2 CANT-USE,PTR RFALSE ?CCL17: ICALL2 UNKNOWN-WORD,PTR RFALSE .FUNCT NUMBER?:ANY:1:1,PTR,CNT,BPTR,CHR,SUM,TIM,?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 EQUAL? CHR,58 \?CCL8 SET 'TIM,SUM SET 'SUM,0 JUMP ?CND6 ?CCL8: GRTR? SUM,10000 /FALSE LESS? CHR,58 \FALSE GRTR? CHR,47 \FALSE MUL SUM,10 >?TMP1 SUB CHR,48 ADD ?TMP1,STACK >SUM ?CND6: INC 'BPTR JUMP ?PRG1 ?REP2: PUT P-LEXV,PTR,W?INTNUM GRTR? SUM,1000 /FALSE ZERO? TIM /?CND15 LESS? TIM,8 \?CCL21 ADD TIM,12 >TIM JUMP ?CND19 ?CCL21: GRTR? TIM,23 /FALSE ?CND19: MUL TIM,60 ADD SUM,STACK >SUM ?CND15: SET 'P-NUMBER,SUM RETURN W?INTNUM .FUNCT ORPHAN-MERGE:ANY:0:0,CNT,TEMP,VERB,BEG,END,ADJ,WRD,?TMP1 SET 'CNT,-1 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 ICALL2 ACLAUSE-WIN,ADJ JUMP ?CND9 ?CCL57: SET 'P-ACLAUSE,FALSE-VALUE RFALSE ?CCL54: ZERO? ADJ \?CCL59 GETB WRD,P-PSOFF BTST STACK,32 /?CTR58 EQUAL? WRD,W?ALLES /?CTR58 EQUAL? WRD,W?EIN,W?EINE,W?EINER /?CTR58 EQUAL? WRD,W?EINEM,W?EINEN \?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?EIN,W?EINE,W?EINER /?CTR66 EQUAL? WRD,W?EINEM,W?EINEN \?CCL67 ?CTR66: ICALL2 ACLAUSE-WIN,ADJ JUMP ?CND9 ?CCL67: GETB WRD,P-PSOFF BTST STACK,128 \?CND52 EQUAL? WRD,P-ANAM \?CCL73 ICALL2 ACLAUSE-WIN,ADJ JUMP ?CND9 ?CCL73: ICALL1 NCLAUSE-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 ?PRG76: IGRTR? 'CNT,P-ITBLLEN \?CCL80 SET 'P-MERGED,TRUE-VALUE RTRUE ?CCL80: GET P-OTBL,CNT PUT P-ITBL,CNT,STACK JUMP ?PRG76 .FUNCT ACLAUSE-WIN:ANY:1:1,ADJ GET P-OTBL,P-VERB PUT P-ITBL,P-VERB,STACK PUT P-CCTBL,CC-SBPTR,P-ACLAUSE ADD P-ACLAUSE,1 PUT P-CCTBL,CC-SEPTR,STACK PUT P-CCTBL,CC-DBPTR,P-ACLAUSE ADD P-ACLAUSE,1 PUT P-CCTBL,CC-DEPTR,STACK ICALL CLAUSE-COPY,P-OTBL,P-OTBL,ADJ GET P-OTBL,P-NC2 ZERO? STACK /?PEN1 SET 'P-NCN,2 ?PEN1: SET 'P-ACLAUSE,FALSE-VALUE RTRUE .FUNCT NCLAUSE-WIN:ANY:0:0 PUT P-CCTBL,CC-SBPTR,P-NC1 PUT P-CCTBL,CC-SEPTR,P-NC1L PUT P-CCTBL,CC-DBPTR,P-ACLAUSE ADD P-ACLAUSE,1 PUT P-CCTBL,CC-DEPTR,STACK ICALL CLAUSE-COPY,P-ITBL,P-OTBL GET P-OTBL,P-NC2 ZERO? STACK /?PEN1 SET 'P-NCN,2 ?PEN1: SET 'P-ACLAUSE,FALSE-VALUE RTRUE .FUNCT WORD-PRINT:ANY:2:3,CNT,BUF,CAP?,DID-CAP ?PRG1: DLESS? 'CNT,0 /TRUE ZERO? DID-CAP \?CCL8 ZERO? CAP? /?CCL8 SET 'DID-CAP,TRUE-VALUE GETB P-INBUF,BUF SUB STACK,32 PRINTC STACK JUMP ?CND6 ?CCL8: GETB P-INBUF,BUF PRINTC STACK ?CND6: INC 'BUF JUMP ?PRG1 .FUNCT UNKNOWN-WORD:ANY:1:1,PTR,BUF,?TMP1 PUT OOPS-TABLE,O-PTR,PTR EQUAL? PRSA,V?SAY \?CND1 PRINTI "Hier passiert garnichts." CRLF RFALSE ?CND1: PRINTI "Das Wort %>" MUL PTR,2 >BUF ADD P-LEXV,BUF GETB STACK,2 >?TMP1 ADD P-LEXV,BUF GETB STACK,3 ICALL WORD-PRINT,?TMP1,STACK PRINTI "%< kann nicht von dem Spielvokabular verstanden werden." CRLF SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-OFLAG,FALSE-VALUE RETURN P-OFLAG .FUNCT CANT-USE:ANY:1:1,PTR,BUF,?TMP1 EQUAL? PRSA,V?SAY \?CND1 PRINTI "Hier passiert garnichts." CRLF RFALSE ?CND1: PRINTI "Du hast das Wort %>" MUL PTR,2 >BUF ADD P-LEXV,BUF GETB STACK,2 >?TMP1 ADD P-LEXV,BUF GETB STACK,3 ICALL WORD-PRINT,?TMP1,STACK PRINTI "%< so gebraucht, da%s ich es nicht verstehen kann." CRLF SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-OFLAG,FALSE-VALUE RETURN P-OFLAG .FUNCT SYNTAX-CHECK:ANY:0:0,SYN,LEN,NUM,OBJ,DRIVE1,DRIVE2,PREP,VERB,TMP,THE-PREP,?TMP2,?TMP1 GET P-ITBL,P-VERB >VERB ZERO? VERB \?CND1 PRINTI "In diesem Satz fehlt das Verb!" CRLF 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 PRINTI "Das Spiel erkennt diesen Satz nicht." CRLF RFALSE ?CCL18: GETB SYN,P-SPREP2 >?TMP1 GET P-ITBL,P-PREP2 EQUAL? ?TMP1,STACK \?CND5 ICALL2 SYNTAX-FOUND,SYN RTRUE ?CCL24: ADD SYN,P-SYNLEN >SYN JUMP ?PRG3 ?REP4: ZERO? DRIVE1 /?CCL32 SET 'GWIM-PRSO?,TRUE-VALUE ZERO? GWIM-PRSO? /?CCL32 GETB DRIVE1,P-SFWIM1 >?TMP2 GETB DRIVE1,P-SLOC1 >?TMP1 GETB DRIVE1,P-SPREP1 CALL GWIM,?TMP2,?TMP1,STACK >OBJ ZERO? OBJ /?CCL32 PUT P-PRSO,P-MATCHLEN,1 PUT P-PRSO,1,OBJ CALL2 SYNTAX-FOUND,DRIVE1 RSTACK ?CCL32: ZERO? DRIVE2 /?CCL37 CALL1 SET-GWIM-PRSO? ZERO? STACK /?CCL37 GETB DRIVE2,P-SFWIM2 >?TMP2 GETB DRIVE2,P-SLOC2 >?TMP1 GETB DRIVE2,P-SPREP2 CALL GWIM,?TMP2,?TMP1,STACK >OBJ ZERO? OBJ /?CCL37 PUT P-PRSI,P-MATCHLEN,1 PUT P-PRSI,1,OBJ CALL2 SYNTAX-FOUND,DRIVE2 RSTACK ?CCL37: EQUAL? VERB,ACT?FIND \?CCL42 PRINTI "Diese Frage kann nicht beantwortet werden." CRLF RFALSE ?CCL42: EQUAL? WINNER,PLAYER /?CCL44 CALL1 CANT-ORPHAN RSTACK ?CCL44: ICALL ORPHAN,DRIVE1,DRIVE2 GET P-OTBL,P-VERBN >TMP SET 'P-OFLAG,TRUE-VALUE ZERO? DRIVE1 /?CCL47 ZERO? TMP \?CCL50 PRINTI "Was?!" CRLF RFALSE ?CCL50: GETB P-VTBL,2 ZERO? STACK \?CCL52 GET TMP,0 ICALL2 CAPITALIZE,STACK JUMP ?CND48 ?CCL52: GETB TMP,2 >?TMP1 GETB TMP,3 ICALL WORD-PRINT,?TMP1,STACK,TRUE-VALUE PUTB P-VTBL,2,0 ?CND48: GETB DRIVE1,P-SPREP1 >THE-PREP CALL NON-SEP?,VERB,THE-PREP ZERO? STACK /?CCL55 GETB DRIVE1,P-SPREP1 ICALL2 PREP-PRINT,STACK PRINTI " was" JUMP ?CND45 ?CCL55: PRINTI " was" GETB DRIVE1,P-SPREP1 ICALL2 PREP-PRINT,STACK JUMP ?CND45 ?CCL47: ZERO? DRIVE2 /?CCL57 PRINTI "Na ja," GETB DRIVE2,P-SPREP2 ICALL2 PREP-PRINT,STACK PRINTI " was" JUMP ?CND45 ?CCL57: PRINTI "Na ja, " ZERO? TMP \?CCL60 PRINTI "was?" CRLF RFALSE ?CCL60: GETB P-VTBL,2 ZERO? STACK \?CCL62 GET TMP,0 PRINTB STACK JUMP ?CND58 ?CCL62: GETB TMP,2 >?TMP1 GETB TMP,3 ICALL WORD-PRINT,?TMP1,STACK PUTB P-VTBL,2,0 ?CND58: PRINTI " was" ?CND45: PRINTC 63 CRLF RFALSE .FUNCT NON-SEP?:ANY:2:2,VERB,THE-PREP EQUAL? VERB,ACT?TRINK,ACT?SPRING,ACT?GRAB /TRUE EQUAL? VERB,ACT?ISS,ACT?TRITT,ACT?UNTERSUCH /TRUE EQUAL? VERB,ACT?SUCH,ACT?SCHWIMM /TRUE EQUAL? VERB,ACT?HOER \?PRD8 EQUAL? THE-PREP,W?NACH /TRUE ?PRD8: EQUAL? VERB,ACT?SCHAU \?PRD11 EQUAL? THE-PREP,W?AN \TRUE ?PRD11: EQUAL? VERB,ACT?STEIG \?PRD14 EQUAL? THE-PREP,W?AUF,W?DURCH /TRUE ?PRD14: EQUAL? VERB,ACT?GEH \FALSE EQUAL? THE-PREP,W?DURCH,W?IN,W?AUF /TRUE RFALSE .FUNCT CANT-ORPHAN:ANY:0:0 PRINTI "%>Ich verstehe das nicht! Worauf beziehst du dich?%<" CRLF RFALSE .FUNCT ORPHAN:ANY:2:2,D1,D2,CNT SET 'CNT,-1 ZERO? P-MERGED \?CND1 PUT P-OCLAUSE,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-DBPTR,P-NC2 PUT P-CCTBL,CC-DEPTR,P-NC2L ICALL 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-DBPTR,P-NC1 PUT P-CCTBL,CC-DEPTR,P-NC1L ICALL 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 THING-PRINT:ANY:1:2,PRSO?,THE?,BEG,END ZERO? PRSO? /?CCL3 GET P-ITBL,P-NC1 >BEG GET P-ITBL,P-NC1L >END JUMP ?CND1 ?CCL3: GET P-ITBL,P-NC2 >BEG GET P-ITBL,P-NC2L >END ?CND1: CALL BUFFER-PRINT,BEG,END,THE? RSTACK .FUNCT BUFFER-PRINT:ANY:3:3,BEG,END,CP,NOSP,WRD,FIRST??,PN,Q?,?TMP1 SET 'NOSP,TRUE-VALUE SET 'FIRST??,TRUE-VALUE ?PRG1: EQUAL? BEG,END /TRUE GET BEG,0 >WRD EQUAL? WRD,W?COMMA \?CCL8 PRINTI ", " JUMP ?CND6 ?CCL8: ZERO? NOSP /?CCL10 SET 'NOSP,FALSE-VALUE JUMP ?CND6 ?CCL10: PRINTC 32 ?CND6: EQUAL? WRD,W?PERIOD,W?COMMA \?CCL13 SET 'NOSP,TRUE-VALUE JUMP ?CND3 ?CCL13: EQUAL? WRD,W?MICH \?CCL15 PRINTD ME SET 'PN,TRUE-VALUE JUMP ?CND3 ?CCL15: EQUAL? WRD,W?INTNUM \?CCL17 PRINTN P-NUMBER SET 'PN,TRUE-VALUE JUMP ?CND3 ?CCL17: ZERO? FIRST?? /?CND18 ZERO? PN \?CND18 ZERO? CP /?CND18 PRINTI "the " ?CND18: ZERO? P-OFLAG \?CTR24 ZERO? P-MERGED /?CCL25 ?CTR24: PRINTB WRD JUMP ?CND23 ?CCL25: EQUAL? WRD,W?ER,W?IHN,W?IHM \?CCL29 CALL2 ACCESSIBLE?,P-HIM-OBJECT ZERO? STACK /?CCL29 PRINTD P-HIM-OBJECT JUMP ?CND23 ?CCL29: EQUAL? WRD,W?SIE,W?IHR \?CCL33 CALL2 ACCESSIBLE?,P-HER-OBJECT ZERO? STACK /?CCL33 PRINTD P-HER-OBJECT JUMP ?CND23 ?CCL33: EQUAL? WRD,W?ES,W?IHM \?CCL37 CALL2 ACCESSIBLE?,P-IT-OBJECT ZERO? STACK /?CCL37 PRINTD P-IT-OBJECT JUMP ?CND23 ?CCL37: GETB BEG,2 >?TMP1 GETB BEG,3 ICALL WORD-PRINT,?TMP1,STACK ?CND23: SET 'FIRST??,FALSE-VALUE ?CND3: ADD BEG,P-WORDLEN >BEG JUMP ?PRG1 .FUNCT PREP-PRINT:ANY:1:2,PREP,CAP?,WRD ZERO? PREP /FALSE CALL2 PREP-FIND,PREP >WRD ZERO? CAP? /?CCL5 CALL2 CAPITALIZE,WRD RSTACK ?CCL5: PRINTC 32 PRINTB WRD RTRUE .FUNCT CAPITALIZE:ANY:1:1,PTR,?TMP1 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 CLAUSE-COPY:ANY:2:3,SRC,DEST,INSRT,BEG,END,?TMP1 GET P-CCTBL,CC-SBPTR GET SRC,STACK >BEG GET P-CCTBL,CC-SEPTR GET SRC,STACK >END GET P-CCTBL,CC-DBPTR >?TMP1 GET P-OCLAUSE,P-MATCHLEN MUL STACK,P-LEXELEN ADD STACK,2 ADD P-OCLAUSE,STACK PUT DEST,?TMP1,STACK ?PRG1: EQUAL? BEG,END \?CCL5 GET P-CCTBL,CC-DEPTR >?TMP1 GET P-OCLAUSE,P-MATCHLEN MUL STACK,P-LEXELEN ADD STACK,2 ADD P-OCLAUSE,STACK PUT DEST,?TMP1,STACK RTRUE ?CCL5: ZERO? INSRT /?CND6 GET BEG,0 EQUAL? P-ANAM,STACK \?CND6 ICALL2 CLAUSE-ADD,INSRT ?CND6: GET BEG,0 ICALL2 CLAUSE-ADD,STACK ADD BEG,P-WORDLEN >BEG JUMP ?PRG1 .FUNCT CLAUSE-ADD:ANY:1:1,WRD,PTR GET P-OCLAUSE,P-MATCHLEN ADD STACK,2 >PTR SUB PTR,1 PUT P-OCLAUSE,STACK,WRD PUT P-OCLAUSE,PTR,0 PUT P-OCLAUSE,P-MATCHLEN,PTR RTRUE .FUNCT PREP-FIND:ANY:1:1,PREP,CNT,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:ANY:1:1,SYN SET 'P-SYNTAX,SYN GETB SYN,P-SACTION >PRSA RETURN PRSA .FUNCT SET-GWIM-PRSO?:ANY:0:0 SET 'GWIM-PRSO?,FALSE-VALUE RTRUE .FUNCT GWIM:ANY:3:3,GBIT,LBIT,PREP,OBJ,VERB,THE-PREP EQUAL? GBIT,KLUDGEBIT \?CND1 RETURN ROOMS ?CND1: SET 'P-GWIMBIT,GBIT SET 'P-SLOCBITS,LBIT GET P-ITBL,P-VERB >VERB PUT P-MERGE,P-MATCHLEN,0 CALL GET-OBJECT,P-MERGE,FALSE-VALUE ZERO? STACK /?CCL5 SET 'P-GWIMBIT,0 GET P-MERGE,P-MATCHLEN EQUAL? STACK,1 \FALSE GET P-MERGE,1 >OBJ PRINTC 40 ZERO? PREP /?CCL11 ZERO? P-END-ON-PREP \?CCL11 CALL2 PREP-FIND,PREP >THE-PREP ZERO? GWIM-PRSO? /?CCL16 EQUAL? VERB,ACT?SAG,ACT?FRAG /?CTR18 EQUAL? THE-PREP,W?MIT,W?NACH,W?AUS /?CTR18 EQUAL? THE-PREP,W?ZU,W?VON \?CCL19 ?CTR18: CALL NON-SEP?,VERB,THE-PREP ZERO? STACK /?CCL25 PRINTB THE-PREP PRINTC 32 ICALL2 DER-DAT-PRINT,OBJ JUMP ?CND17 ?CCL25: ICALL2 DER-DAT-PRINT,OBJ PRINTC 32 PRINTB THE-PREP JUMP ?CND17 ?CCL19: CALL NON-SEP?,VERB,THE-PREP ZERO? STACK /?CCL27 PRINTB THE-PREP PRINTC 32 ICALL2 DER-ACC-PRINT,OBJ JUMP ?CND17 ?CCL27: ICALL2 DER-ACC-PRINT,OBJ PRINTC 32 PRINTB THE-PREP ?CND17: SET 'GWIM-PRSO?,FALSE-VALUE JUMP ?CND14 ?CCL16: EQUAL? THE-PREP,W?MIT,W?AUS,W?ZU /?CTR28 EQUAL? THE-PREP,W?VON,W?NACH \?CCL29 ?CTR28: PRINTB THE-PREP PRINTC 32 ICALL2 DER-DAT-PRINT,OBJ JUMP ?CND14 ?CCL29: PRINTB THE-PREP PRINTC 32 ICALL2 DER-ACC-PRINT,OBJ ?CND14: PRINTC 41 CRLF CRLF RETURN OBJ ?CCL11: EQUAL? VERB,ACT?SAG,ACT?FRAG /?CTR32 EQUAL? THE-PREP,W?MIT,W?NACH,W?AUS /?CTR32 EQUAL? THE-PREP,W?ZU,W?VON \?CCL33 ?CTR32: ICALL2 DER-DAT-PRINT,OBJ PRINTC 41 CRLF CRLF RETURN OBJ ?CCL33: ICALL2 DER-ACC-PRINT,OBJ PRINTC 41 CRLF CRLF RETURN OBJ ?CCL5: SET 'P-GWIMBIT,0 RFALSE .FUNCT SNARF-OBJECTS:ANY:0:0,OPTR,IPTR,L PUT P-BUTS,P-MATCHLEN,0 GET P-ITBL,P-NC2 >IPTR ZERO? IPTR /?CND1 GETB P-SYNTAX,P-SLOC2 >P-SLOCBITS GET P-ITBL,P-NC2L CALL SNARFEM,IPTR,STACK,P-PRSI ZERO? STACK /FALSE ?CND1: GET P-ITBL,P-NC1 >OPTR ZERO? OPTR /?CND5 GETB P-SYNTAX,P-SLOC1 >P-SLOCBITS GET P-ITBL,P-NC1L CALL SNARFEM,OPTR,STACK,P-PRSO ZERO? STACK /FALSE ?CND5: GET P-BUTS,P-MATCHLEN ZERO? STACK /TRUE GET P-PRSO,P-MATCHLEN >L ZERO? OPTR /?CND11 CALL2 BUT-MERGE,P-PRSO >P-PRSO ?CND11: ZERO? IPTR /TRUE ZERO? OPTR /?CCL14 GET P-PRSO,P-MATCHLEN EQUAL? L,STACK \TRUE ?CCL14: CALL2 BUT-MERGE,P-PRSI >P-PRSI RTRUE .FUNCT BUT-MERGE:ANY:1:1,TBL,LEN,BUTLEN,CNT,MATCHES,OBJ,NTBL SET 'CNT,1 GET TBL,P-MATCHLEN >LEN PUT P-MERGE,P-MATCHLEN,0 ?PRG1: DLESS? 'LEN,0 /?REP2 GET TBL,CNT >OBJ CALL ZMEMQ,OBJ,P-BUTS ZERO? STACK \?CND3 ADD MATCHES,1 PUT P-MERGE,STACK,OBJ INC 'MATCHES ?CND3: INC 'CNT JUMP ?PRG1 ?REP2: PUT P-MERGE,P-MATCHLEN,MATCHES SET 'NTBL,P-MERGE SET 'P-MERGE,TBL RETURN NTBL .FUNCT SNARFEM:ANY:3:3,PTR,EPTR,TBL,BUT,LEN,WV,WRD,NW,WAS-ALL SET 'P-AND,FALSE-VALUE EQUAL? P-GETFLAGS,P-ALL \?CND1 SET 'WAS-ALL,TRUE-VALUE ?CND1: SET 'P-GETFLAGS,0 PUT TBL,P-MATCHLEN,0 GET PTR,0 >WRD ?PRG3: EQUAL? PTR,EPTR \?CCL7 ZERO? BUT /?PRD10 PUSH BUT JUMP ?PEN8 ?PRD10: PUSH TBL ?PEN8: CALL2 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?ALLES \?CCL18 SET 'P-GETFLAGS,P-ALL EQUAL? NW,W?VOLL \?CND5 ADD PTR,P-WORDLEN >PTR JUMP ?CND5 ?CCL18: EQUAL? WRD,W?ABER,W?AUSSER,W?AU%SER \?CCL22 ZERO? BUT /?PRD27 PUSH BUT JUMP ?PEN25 ?PRD27: PUSH TBL ?PEN25: CALL2 GET-OBJECT,STACK ZERO? STACK /FALSE SET 'BUT,P-BUTS PUT BUT,P-MATCHLEN,0 JUMP ?CND5 ?CCL22: EQUAL? WRD,W?EIN,W?EINE,W?EINEM /?CTR28 EQUAL? WRD,W?EINEN,W?EINER \?CCL29 ?CTR28: ZERO? P-ADJ \?CCL34 SET 'P-GETFLAGS,P-ONE EQUAL? NW,W?VOLL \?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: CALL2 GET-OBJECT,STACK ZERO? STACK /FALSE ZERO? NW \?CND5 RTRUE ?CCL29: EQUAL? WRD,W?UND,W?COMMA \?CCL45 EQUAL? NW,W?UND,W?COMMA /?CCL45 SET 'P-AND,TRUE-VALUE ZERO? BUT /?PRD52 PUSH BUT JUMP ?PEN50 ?PRD52: PUSH TBL ?PEN50: CALL2 GET-OBJECT,STACK ZERO? STACK \?CND5 RFALSE ?CCL45: CALL WT?,WRD,4 ZERO? STACK \?CND5 EQUAL? WRD,W?UND,W?COMMA /?CND5 EQUAL? WRD,W?VOLL \?CCL56 ZERO? P-GETFLAGS \?CND5 SET 'P-GETFLAGS,P-INHIBIT JUMP ?CND5 ?CCL56: CALL WT?,WRD,32 ZERO? STACK /?CCL60 ZERO? P-ADJ \?CCL60 SET 'P-ADJ,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 GET-OBJECT:ANY:1:2,TBL,VRB,BITS,LEN,XBITS,TLEN,GCHECK,OLEN,OBJ ASSIGNED? 'VRB /?CND1 SET 'VRB,TRUE-VALUE ?CND1: SET 'XBITS,P-SLOCBITS GET TBL,P-MATCHLEN >TLEN BTST P-GETFLAGS,P-INHIBIT /TRUE ZERO? P-NAM \?CND5 ZERO? P-ADJ /?CND5 CALL WT?,P-ADJ,128,0 ZERO? STACK /?CCL11 SET 'P-NAM,P-ADJ SET 'P-ADJ,FALSE-VALUE ?CND5: ZERO? P-NAM \?CND13 ZERO? P-ADJ \?CND13 EQUAL? P-GETFLAGS,P-ALL /?CND13 ZERO? P-GWIMBIT \?CND13 ZERO? VRB /FALSE PRINTI "In diesem Satz scheint ein Substantiv zu fehlen!" CRLF RFALSE ?CCL11: CALL WT?,P-ADJ,16,3 >BITS ZERO? BITS /?CND5 SET 'P-ADJ,FALSE-VALUE PUT TBL,P-MATCHLEN,1 PUT TBL,1,INTDIR SET 'P-DIRECTION,BITS RTRUE ?CND13: EQUAL? P-GETFLAGS,P-ALL \?CCL22 ZERO? P-SLOCBITS \?CND21 ?CCL22: SET 'P-SLOCBITS,-1 ?CND21: SET 'P-TABLE,TBL ?PRG25: ZERO? GCHECK /?CCL29 ICALL2 GLOBAL-CHECK,TBL JUMP ?CND27 ?CCL29: ZERO? LIT /?CND30 FCLEAR PLAYER,TRANSBIT ICALL DO-SL,HERE,SOG,SIR FSET PLAYER,TRANSBIT ?CND30: ICALL DO-SL,PLAYER,SH,SC ?CND27: GET TBL,P-MATCHLEN SUB STACK,TLEN >LEN BTST P-GETFLAGS,P-ALL /?CND32 BTST P-GETFLAGS,P-ONE \?CCL35 ZERO? LEN /?CCL35 EQUAL? LEN,1 /?CND38 RANDOM LEN GET TBL,STACK PUT TBL,1,STACK PRINTC 40 GET TBL,1 PRINTD STACK PRINTI "?)" CRLF ?CND38: PUT TBL,P-MATCHLEN,1 JUMP ?CND32 ?CCL35: GRTR? LEN,1 /?CCL40 ZERO? LEN \?CND32 EQUAL? P-SLOCBITS,-1 /?CND32 ?CCL40: EQUAL? P-SLOCBITS,-1 \?CCL47 SET 'P-SLOCBITS,XBITS SET 'OLEN,LEN GET TBL,P-MATCHLEN SUB STACK,LEN PUT TBL,P-MATCHLEN,STACK JUMP ?PRG25 ?CCL47: ZERO? LEN \?CND48 SET 'LEN,OLEN ?CND48: EQUAL? WINNER,PLAYER /?CCL52 ICALL1 CANT-ORPHAN RFALSE ?CCL52: ZERO? VRB /?CCL54 ZERO? P-NAM /?CCL54 ICALL WHICH-PRINT,TLEN,LEN,TBL EQUAL? TBL,P-PRSO \?CCL59 SET 'P-ACLAUSE,P-NC1 JUMP ?CND57 ?CCL59: SET 'P-ACLAUSE,P-NC2 ?CND57: SET 'P-AADJ,P-ADJ SET 'P-ANAM,P-NAM ICALL ORPHAN,FALSE-VALUE,FALSE-VALUE SET 'P-OFLAG,TRUE-VALUE JUMP ?CND50 ?CCL54: ZERO? VRB /?CND50 PRINTI "In diesem Satz scheint ein Substantiv zu fehlen!" CRLF ?CND50: SET 'P-NAM,FALSE-VALUE SET 'P-ADJ,FALSE-VALUE RFALSE ?CND32: ZERO? LEN \?CCL63 ZERO? GCHECK /?CCL63 ZERO? VRB /?CND66 SET 'P-SLOCBITS,XBITS ZERO? LIT \?CTR69 EQUAL? PRSA,V?TELL \?CCL70 ?CTR69: ICALL OBJ-FOUND,NOT-HERE-OBJECT,TBL SET 'P-XNAM,P-NAM SET 'P-XADJ,P-ADJ SET 'P-NAM,FALSE-VALUE SET 'P-ADJ,FALSE-VALUE RTRUE ?CCL70: PRINTI "Es ist zu dunkel, um das zu sehen." CRLF ?CND66: SET 'P-NAM,FALSE-VALUE SET 'P-ADJ,FALSE-VALUE RFALSE ?CCL63: ZERO? LEN \?CND61 SET 'GCHECK,TRUE-VALUE JUMP ?PRG25 ?CND61: SET 'P-SLOCBITS,XBITS SET 'P-NAM,FALSE-VALUE SET 'P-ADJ,FALSE-VALUE RTRUE .FUNCT WHICH-PRINT:ANY:3:3,TLEN,LEN,TBL,OBJ,RLEN SET 'RLEN,LEN PRINTI "Welche" INC 'TLEN GET TBL,TLEN >OBJ FSET? OBJ,DERBIT \?CCL3 PRINTC 114 JUMP ?CND1 ?CCL3: FSET? OBJ,DASBIT \?CND1 PRINTC 115 ?CND1: ZERO? P-OFLAG \?CTR6 ZERO? P-MERGED \?CTR6 ZERO? P-AND /?CCL7 ?CTR6: ZERO? P-NAM /?CCL13 PRINTC 32 PRINTB P-NAM JUMP ?CND5 ?CCL13: ZERO? P-ADJ /?CND5 PRINTC 32 PRINTB P-ADJ JUMP ?CND5 ?CCL7: PRINTC 32 EQUAL? TBL,P-PRSO /?PRD15 PUSH 0 JUMP ?PRD16 ?PRD15: PUSH 1 ?PRD16: ICALL2 THING-PRINT,STACK ?CND5: PRINTI " meinst du, " ?PRG17: ICALL2 DER-ACC-PRINT,OBJ INC 'TLEN GET TBL,TLEN >OBJ EQUAL? LEN,2 \?CCL21 EQUAL? RLEN,2 /?CND22 PRINTC 44 ?CND22: PRINTI " or " JUMP ?CND19 ?CCL21: GRTR? LEN,2 \?CND19 PRINTI ", " ?CND19: DLESS? 'LEN,1 \?PRG17 PRINTR "?" .FUNCT GLOBAL-CHECK:ANY:1:1,TBL,LEN,RMG,RMGL,CNT,OBJ,OBITS,FOO GET TBL,P-MATCHLEN >LEN SET 'OBITS,P-SLOCBITS GETPT HERE,P?GLOBAL >RMG ZERO? RMG /?CND1 PTSIZE RMG DIV STACK,2 SUB STACK,1 >RMGL ?PRG3: GET RMG,CNT >OBJ CALL THIS-IT?,OBJ,TBL ZERO? STACK /?CND5 ICALL OBJ-FOUND,OBJ,TBL ?CND5: IGRTR? 'CNT,RMGL \?PRG3 ?CND1: GET TBL,P-MATCHLEN EQUAL? STACK,LEN \FALSE SET 'P-SLOCBITS,-1 SET 'P-TABLE,TBL ICALL DO-SL,GLOBAL-OBJECTS,1,1 SET 'P-SLOCBITS,OBITS GET TBL,P-MATCHLEN ZERO? STACK \FALSE EQUAL? PRSA,V?LOOK-INSIDE,V?SEARCH,V?EXAMINE \FALSE CALL DO-SL,ROOMS,1,1 RSTACK .FUNCT DO-SL:ANY:3:3,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:ANY:3:3,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,TBL ZERO? STACK /?CND6 ICALL OBJ-FOUND,OBJ,TBL ?CND6: ZERO? LVL \?PRD14 FSET? OBJ,SEARCHBIT /?PRD14 FSET? OBJ,SURFACEBIT \?CND11 ?PRD14: FIRST? OBJ >NOBJ \?CND11 FSET? OBJ,OPENBIT /?CCL12 FSET? OBJ,TRANSBIT \?CND11 ?CCL12: FSET? OBJ,SURFACEBIT \?CCL23 PUSH P-SRCALL JUMP ?CND21 ?CCL23: FSET? OBJ,SEARCHBIT \?CCL25 PUSH P-SRCALL JUMP ?CND21 ?CCL25: PUSH P-SRCTOP ?CND21: CALL SEARCH-LIST,OBJ,TBL,STACK >FLS ?CND11: NEXT? OBJ >OBJ /?PRG4 RTRUE .FUNCT OBJ-FOUND:ANY:2:2,OBJ,TBL,PTR GET TBL,P-MATCHLEN >PTR ADD PTR,1 PUT TBL,STACK,OBJ ADD PTR,1 PUT TBL,P-MATCHLEN,STACK RTRUE .FUNCT TAKE-CHECK:ANY:0:0 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:ANY:2:2,TBL:TABLE,IBITS:FIX,PTR:FIX,OBJ:OBJECT,TAKEN:ANY GET TBL,P-MATCHLEN >PTR ZERO? PTR /TRUE BTST IBITS,SHAVE /?PRG8 BTST IBITS,STAKE \TRUE ?PRG8: DLESS? 'PTR,0 /TRUE ADD PTR,1 GET TBL,STACK >OBJ EQUAL? OBJ,HIM \?CCL15 CALL2 ACCESSIBLE?,P-HIM-OBJECT ZERO? STACK \?CCL18 ICALL1 REFERRING RFALSE ?CCL18: SET 'OBJ,P-HIM-OBJECT JUMP ?CND13 ?CCL15: EQUAL? OBJ,HER \?CCL20 CALL2 ACCESSIBLE?,P-HER-OBJECT ZERO? STACK \?CCL23 ICALL1 REFERRING RFALSE ?CCL23: SET 'OBJ,P-HER-OBJECT JUMP ?CND13 ?CCL20: EQUAL? OBJ,IT \?CND13 CALL2 ACCESSIBLE?,P-IT-OBJECT ZERO? STACK \?CCL27 ICALL1 REFERRING RFALSE ?CCL27: SET 'OBJ,P-IT-OBJECT ?CND13: CALL2 HELD?,OBJ ZERO? STACK \?PRG8 EQUAL? OBJ,HANDS,ME /?PRG8 SET 'PRSO,OBJ FSET? OBJ,TRYTAKEBIT \?CCL34 SET 'TAKEN,TRUE-VALUE JUMP ?CND32 ?CCL34: EQUAL? WINNER,ADVENTURER /?CCL36 SET 'TAKEN,FALSE-VALUE JUMP ?CND32 ?CCL36: BTST IBITS,STAKE \?CCL38 CALL2 ITAKE,FALSE-VALUE EQUAL? STACK,TRUE-VALUE \?CCL38 SET 'TAKEN,FALSE-VALUE JUMP ?CND32 ?CCL38: SET 'TAKEN,TRUE-VALUE ?CND32: ZERO? TAKEN /?CCL43 BTST IBITS,SHAVE \?CCL43 EQUAL? WINNER,ADVENTURER \?CCL43 EQUAL? OBJ,NOT-HERE-OBJECT \?CND47 PRINTI "Das hast du nicht!" CRLF RFALSE ?CND47: PRINTI "Du hast " ICALL2 DER-ACC-PRINT,OBJ PRINTI " nicht." CRLF RFALSE ?CCL43: ZERO? TAKEN \?PRG8 EQUAL? WINNER,ADVENTURER \?PRG8 PRINTC 40 ICALL2 DER-ACC-CAP-PRINT,OBJ PRINTI " erst nehmen)" CRLF JUMP ?PRG8 .FUNCT REFERRING:ANY:0:0 PRINTR "Es ist nicht klar, worauf du dich beziehst." .FUNCT MANY-CHECK:ANY:0:0,LOSS,TMP,?TMP1 GET P-PRSO,P-MATCHLEN GRTR? STACK,1 \?CCL3 GETB P-SYNTAX,P-SLOC1 BTST STACK,SMANY /?CCL3 SET 'LOSS,1 JUMP ?CND1 ?CCL3: GET P-PRSI,P-MATCHLEN GRTR? STACK,1 \?CND1 GETB P-SYNTAX,P-SLOC2 BTST STACK,SMANY /?CND1 SET 'LOSS,2 ?CND1: ZERO? LOSS /TRUE PRINTI "Man kann mehrere " EQUAL? LOSS,2 \?CCL14 PRINTI "Dative" JUMP ?CND12 ?CCL14: PRINTI "Akkusitiv" ?CND12: PRINTI " nicht mit %>" GET P-ITBL,P-VERBN >TMP ZERO? TMP \?CCL17 PRINTI "das" JUMP ?CND15 ?CCL17: ZERO? P-OFLAG \?CTR18 ZERO? P-MERGED /?CCL19 ?CTR18: GET TMP,0 PRINTB STACK JUMP ?CND15 ?CCL19: GETB TMP,2 >?TMP1 GETB TMP,3 ICALL WORD-PRINT,?TMP1,STACK ?CND15: PRINTI "%< gebrauchen." CRLF RFALSE .FUNCT ZMEMQ:ANY:2:3,ITM,TBL,SIZE,CNT ASSIGNED? 'SIZE /?CND1 SET 'SIZE,-1 ?CND1: SET 'CNT,1 ZERO? TBL /FALSE LESS? SIZE,0 /?CCL7 SET 'CNT,0 JUMP ?PRG8 ?CCL7: GET TBL,0 >SIZE ?PRG8: GET TBL,CNT EQUAL? ITM,STACK \?CCL12 MUL CNT,2 ADD TBL,STACK RSTACK ?CCL12: IGRTR? 'CNT,SIZE \?PRG8 RFALSE .FUNCT LIT?:ANY:1:2,RM,RMBIT,OHERE,LIT ASSIGNED? 'RMBIT /?CND1 SET 'RMBIT,TRUE-VALUE ?CND1: ZERO? ALWAYS-LIT /?CND3 EQUAL? WINNER,PLAYER /TRUE ?CND3: SET 'P-GWIMBIT,ONBIT SET 'OHERE,HERE SET 'HERE,RM ZERO? RMBIT /?CCL9 FSET? RM,ONBIT \?CCL9 SET 'LIT,TRUE-VALUE JUMP ?CND7 ?CCL9: PUT P-MERGE,P-MATCHLEN,0 SET 'P-TABLE,P-MERGE SET 'P-SLOCBITS,-1 EQUAL? OHERE,RM \?CND12 ICALL DO-SL,WINNER,1,1 EQUAL? WINNER,PLAYER /?CND12 IN? PLAYER,RM \?CND12 ICALL DO-SL,PLAYER,1,1 ?CND12: ICALL DO-SL,RM,1,1 GET P-TABLE,P-MATCHLEN GRTR? STACK,0 \?CND7 SET 'LIT,TRUE-VALUE ?CND7: SET 'HERE,OHERE SET 'P-GWIMBIT,0 RETURN LIT .FUNCT THIS-IT?:ANY:2:2,OBJ,TBL,SYNS 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 DIV STACK,2 SUB STACK,1 CALL ZMEMQ,P-ADJ,SYNS,STACK ZERO? STACK /FALSE ?CCL9: ZERO? P-GWIMBIT /TRUE FSET? OBJ,P-GWIMBIT /TRUE RFALSE .FUNCT ACCESSIBLE?:ANY:1:1,OBJ,L,?TMP1 ZERO? OBJ /FALSE LOC OBJ >L ZERO? L /FALSE FSET? OBJ,INVISIBLE /FALSE ZERO? L /FALSE EQUAL? L,GLOBAL-OBJECTS /TRUE EQUAL? L,LOCAL-GLOBALS \?CCL14 CALL GLOBAL-IN?,OBJ,HERE ZERO? STACK \TRUE ?CCL14: CALL2 META-LOC,OBJ >?TMP1 LOC WINNER EQUAL? ?TMP1,HERE,STACK \FALSE LOC WINNER EQUAL? L,WINNER,HERE,STACK /TRUE FSET? L,OPENBIT \FALSE CALL2 ACCESSIBLE?,L ZERO? STACK /FALSE RTRUE .FUNCT META-LOC:ANY:1:1,OBJ ?PRG1: ZERO? OBJ /FALSE IN? OBJ,GLOBAL-OBJECTS \?CND3 RETURN GLOBAL-OBJECTS ?CND3: IN? OBJ,ROOMS \?CCL9 RETURN OBJ ?CCL9: LOC OBJ >OBJ JUMP ?PRG1 .ENDI