mirror of
https://github.com/historicalsource/seastalker.git
synced 2026-04-18 10:06:08 +00:00
Final Revision
This commit is contained in:
399
parser.zap
399
parser.zap
@@ -7,7 +7,7 @@
|
||||
|
||||
.FUNCT I-PROMPT-2
|
||||
ZERO? P-PROMPT /FALSE
|
||||
SET 'P-PROMPT,0
|
||||
SET 'P-PROMPT,FALSE-VALUE
|
||||
CRLF
|
||||
PRINTI "(Are you tired of seeing ""What next?"" Well, you won't see it any more.)"
|
||||
CRLF
|
||||
@@ -18,17 +18,17 @@
|
||||
RFALSE
|
||||
|
||||
|
||||
.FUNCT PARSER,PTR=P-LEXSTART,WORD,VAL=0,VERB=0,LEN,DIR=0,NW=0,LW=0,NUM,SCNT,CNT=-1
|
||||
.FUNCT PARSER,PTR=P-LEXSTART,WRD,VAL=0,VERB=0,OF-FLAG=0,LEN,DIR=0,NW=0,LW=0,NUM,SCNT,CNT=-1
|
||||
?PRG1: IGRTR? 'CNT,P-ITBLLEN \?ELS5
|
||||
JUMP ?REP2
|
||||
?ELS5: PUT P-ITBL,CNT,0
|
||||
JUMP ?PRG1
|
||||
?REP2: SET 'P-NUMBER,-1
|
||||
SET 'P-NAM,0
|
||||
SET 'P-ADJ,0
|
||||
SET 'P-ADVERB,0
|
||||
SET 'P-MERGED,0
|
||||
SET 'P-WHAT-IGNORED,0
|
||||
SET 'P-NAM,FALSE-VALUE
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
SET 'P-ADVERB,FALSE-VALUE
|
||||
SET 'P-MERGED,FALSE-VALUE
|
||||
SET 'P-WHAT-IGNORED,FALSE-VALUE
|
||||
PUT P-PRSO,P-MATCHLEN,0
|
||||
PUT P-PRSI,P-MATCHLEN,0
|
||||
PUT P-BUTS,P-MATCHLEN,0
|
||||
@@ -40,12 +40,12 @@
|
||||
LOC WINNER >HERE
|
||||
?CND8: ZERO? P-CONT /?ELS18
|
||||
SET 'PTR,P-CONT
|
||||
SET 'P-CONT,0
|
||||
SET 'P-CONT,FALSE-VALUE
|
||||
EQUAL? PRSA,V?TELL /?CND16
|
||||
CRLF
|
||||
JUMP ?CND16
|
||||
?ELS18: SET 'WINNER,PLAYER
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
LOC WINNER
|
||||
FSET? STACK,VEHBIT /?CND25
|
||||
LOC WINNER >HERE
|
||||
@@ -85,43 +85,43 @@
|
||||
CRLF
|
||||
RFALSE
|
||||
?CND59: SET 'LEN,P-LEN
|
||||
SET 'P-DIR,0
|
||||
SET 'P-DIR,FALSE-VALUE
|
||||
SET 'P-NCN,0
|
||||
SET 'P-GETFLAGS,0
|
||||
PUT P-ITBL,P-VERBN,0
|
||||
?PRG64: DLESS? 'P-LEN,0 \?ELS68
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
JUMP ?REP65
|
||||
?ELS68: GET P-LEXV,PTR >WORD
|
||||
CALL BUZZER-WORD?,WORD
|
||||
?ELS68: GET P-LEXV,PTR >WRD
|
||||
CALL BUZZER-WORD?,WRD
|
||||
ZERO? STACK \FALSE
|
||||
ZERO? WORD \?THN73
|
||||
CALL NUMBER?,PTR >WORD
|
||||
ZERO? WORD \?THN73
|
||||
CALL NAME?,PTR >WORD
|
||||
ZERO? WORD /?ELS72
|
||||
?THN73: EQUAL? WORD,W?TO \?ELS77
|
||||
ZERO? WRD \?THN73
|
||||
CALL NUMBER?,PTR >WRD
|
||||
ZERO? WRD \?THN73
|
||||
CALL NAME?,PTR >WRD
|
||||
ZERO? WRD /?ELS72
|
||||
?THN73: EQUAL? WRD,W?TO \?ELS77
|
||||
EQUAL? VERB,ACT?TELL,ACT?ASK \?ELS77
|
||||
SET 'VERB,ACT?TELL
|
||||
SET 'WORD,W?QUOTE
|
||||
SET 'WRD,W?QUOTE
|
||||
JUMP ?CND75
|
||||
?ELS77: EQUAL? WORD,W?THEN \?CND75
|
||||
?ELS77: EQUAL? WRD,W?THEN \?CND75
|
||||
ZERO? VERB \?CND75
|
||||
PUT P-ITBL,P-VERB,ACT?TELL
|
||||
PUT P-ITBL,P-VERBN,0
|
||||
SET 'WORD,W?QUOTE
|
||||
?CND75: EQUAL? WORD,W?THEN,W?. /?THN87
|
||||
EQUAL? WORD,W?QUOTE \?ELS86
|
||||
?THN87: EQUAL? WORD,W?QUOTE \?CND89
|
||||
SET 'WRD,W?QUOTE
|
||||
?CND75: EQUAL? WRD,W?THEN,W?PERIOD /?THN87
|
||||
EQUAL? WRD,W?QUOTE \?ELS86
|
||||
?THN87: EQUAL? WRD,W?QUOTE \?CND89
|
||||
ZERO? QUOTE-FLAG /?ELS94
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
JUMP ?CND89
|
||||
?ELS94: SET 'QUOTE-FLAG,1
|
||||
?ELS94: SET 'QUOTE-FLAG,TRUE-VALUE
|
||||
?CND89: ZERO? P-LEN /?THN98
|
||||
ADD PTR,P-LEXELEN >P-CONT
|
||||
?THN98: PUTB P-LEXV,P-LEXWORDS,P-LEN
|
||||
JUMP ?REP65
|
||||
?ELS86: CALL WT?,WORD,PS?DIRECTION,P1?DIRECTION >VAL
|
||||
?ELS86: CALL WT?,WRD,PS?DIRECTION,P1?DIRECTION >VAL
|
||||
ZERO? VAL /?ELS101
|
||||
EQUAL? LEN,1 /?THN104
|
||||
EQUAL? LEN,2 \?ELS107
|
||||
@@ -130,7 +130,7 @@
|
||||
GET P-LEXV,STACK >NW
|
||||
EQUAL? NW,W?THEN,W?QUOTE \?ELS109
|
||||
GRTR? LEN,2 /?THN104
|
||||
?ELS109: EQUAL? NW,W?. \?ELS111
|
||||
?ELS109: EQUAL? NW,W?PERIOD \?ELS111
|
||||
GRTR? LEN,1 /?THN104
|
||||
?ELS111: ZERO? QUOTE-FLAG /?ELS113
|
||||
EQUAL? LEN,2 \?ELS113
|
||||
@@ -142,18 +142,18 @@
|
||||
ADD PTR,P-LEXELEN
|
||||
PUT P-LEXV,STACK,W?THEN
|
||||
?CND116: GRTR? LEN,2 /?CND66
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
JUMP ?REP65
|
||||
?ELS101: CALL WT?,WORD,PS?VERB,P1?VERB >VAL
|
||||
?ELS101: CALL WT?,WRD,PS?VERB,P1?VERB >VAL
|
||||
ZERO? VAL /?ELS123
|
||||
ZERO? VERB /?THN126
|
||||
EQUAL? VERB,ACT?NAME \?ELS123
|
||||
?THN126: EQUAL? VERB,ACT?NAME \?CND128
|
||||
SET 'P-WHAT-IGNORED,1
|
||||
SET 'P-WHAT-IGNORED,TRUE-VALUE
|
||||
?CND128: SET 'VERB,VAL
|
||||
PUT P-ITBL,P-VERB,VAL
|
||||
PUT P-ITBL,P-VERBN,P-VTBL
|
||||
PUT P-VTBL,0,WORD
|
||||
PUT P-VTBL,0,WRD
|
||||
MUL PTR,2
|
||||
ADD STACK,2 >NUM
|
||||
GETB P-LEXV,NUM
|
||||
@@ -162,70 +162,80 @@
|
||||
GETB P-LEXV,STACK
|
||||
PUTB P-VTBL,3,STACK
|
||||
JUMP ?CND66
|
||||
?ELS123: CALL WT?,WORD,PS?PREPOSITION,0 >VAL
|
||||
?ELS123: CALL WT?,WRD,PS?PREPOSITION,0 >VAL
|
||||
ZERO? VAL \?THN133
|
||||
EQUAL? WORD,W?ONE,W?A /?THN137
|
||||
CALL WT?,WORD,PS?ADJECTIVE
|
||||
EQUAL? WRD,W?ONE,W?A /?THN137
|
||||
CALL WT?,WRD,PS?ADJECTIVE
|
||||
ZERO? STACK \?THN137
|
||||
CALL WT?,WORD,PS?OBJECT
|
||||
CALL WT?,WRD,PS?OBJECT
|
||||
ZERO? STACK /?ELS132
|
||||
?THN137: SET 'VAL,0
|
||||
?THN133: GRTR? P-LEN,0 \?ELS141
|
||||
?THN137: SET 'VAL,0 \?ELS132
|
||||
?THN133: GRTR? P-LEN,1 \?ELS141
|
||||
ADD PTR,P-LEXELEN
|
||||
GET P-LEXV,STACK
|
||||
EQUAL? STACK,W?OF \?ELS141
|
||||
EQUAL? VERB,ACT?MAKE /?ELS141
|
||||
ZERO? VAL \?ELS141
|
||||
EQUAL? WORD,W?ONE,W?A /?ELS141
|
||||
EQUAL? WRD,W?ONE,W?A /?ELS141
|
||||
SET 'OF-FLAG,TRUE-VALUE
|
||||
JUMP ?CND66
|
||||
?ELS141: ZERO? VAL /?ELS145
|
||||
ZERO? P-LEN /?THN148
|
||||
ADD PTR,2
|
||||
GET P-LEXV,STACK
|
||||
EQUAL? STACK,W?THEN,W?. \?ELS145
|
||||
EQUAL? STACK,W?THEN,W?PERIOD \?ELS145
|
||||
?THN148: LESS? P-NCN,2 \?CND66
|
||||
PUT P-ITBL,P-PREP1,VAL
|
||||
PUT P-ITBL,P-PREP1N,WORD
|
||||
PUT P-ITBL,P-PREP1N,WRD
|
||||
JUMP ?CND66
|
||||
?ELS145: EQUAL? P-NCN,2 \?ELS154
|
||||
PRINTI "(I found too many nouns in that sentence!)"
|
||||
CRLF
|
||||
RFALSE
|
||||
?ELS154: INC 'P-NCN
|
||||
CALL CLAUSE,PTR,VAL,WORD >PTR
|
||||
CALL CLAUSE,PTR,VAL,WRD >PTR
|
||||
ZERO? PTR /FALSE
|
||||
LESS? PTR,0 \?CND66
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
JUMP ?REP65
|
||||
?ELS132: EQUAL? WORD,W?CLOSELY \?ELS165
|
||||
?ELS132: EQUAL? WRD,W?CLOSELY \?ELS165
|
||||
SET 'P-ADVERB,W?CAREFULLY
|
||||
JUMP ?CND66
|
||||
?ELS165: EQUAL? WORD,W?CAREFULLY,W?QUIETLY,W?PRIVATELY /?THN168
|
||||
EQUAL? WORD,W?SLOWLY,W?QUICKLY,W?BRIEFLY \?ELS167
|
||||
?THN168: SET 'P-ADVERB,WORD
|
||||
?ELS165: EQUAL? WRD,W?CAREFULLY,W?QUIETLY,W?PRIVATELY /?THN168
|
||||
EQUAL? WRD,W?SLOWLY,W?QUICKLY,W?BRIEFLY \?ELS167
|
||||
?THN168: SET 'P-ADVERB,WRD
|
||||
JUMP ?CND66
|
||||
?ELS167: CALL WT?,WORD,PS?BUZZ-WORD
|
||||
ZERO? STACK /?ELS171
|
||||
?ELS167: EQUAL? WRD,W?OF \?ELS171
|
||||
ZERO? OF-FLAG /?THN175
|
||||
ADD PTR,P-LEXELEN
|
||||
GET P-LEXV,STACK
|
||||
EQUAL? STACK,W?PERIOD,W?THEN \?ELS174
|
||||
?THN175: CALL CANT-USE,PTR
|
||||
RFALSE
|
||||
?ELS174: SET 'OF-FLAG,FALSE-VALUE
|
||||
JUMP ?CND66
|
||||
?ELS171: CALL CANT-USE,PTR
|
||||
?ELS171: CALL WT?,WRD,PS?BUZZ-WORD
|
||||
ZERO? STACK /?ELS180
|
||||
JUMP ?CND66
|
||||
?ELS180: CALL CANT-USE,PTR
|
||||
RFALSE
|
||||
?ELS72: CALL UNKNOWN-WORD,PTR
|
||||
RFALSE
|
||||
?CND66: SET 'LW,WORD
|
||||
?CND66: SET 'LW,WRD
|
||||
ADD PTR,P-LEXELEN >PTR
|
||||
JUMP ?PRG64
|
||||
?REP65: ZERO? DIR /?CND176
|
||||
?REP65: ZERO? DIR /?CND185
|
||||
SET 'PRSA,V?WALK
|
||||
SET 'PRSO,DIR
|
||||
SET 'P-WALK-DIR,DIR
|
||||
RTRUE
|
||||
?CND176: SET 'P-WALK-DIR,0
|
||||
ZERO? P-OFLAG /?CND180
|
||||
RETURN TRUE-VALUE
|
||||
?CND185: SET 'P-WALK-DIR,FALSE-VALUE
|
||||
ZERO? P-OFLAG /?CND189
|
||||
CALL ORPHAN-MERGE
|
||||
?CND180: GET P-ITBL,P-VERB
|
||||
ZERO? STACK \?CND184
|
||||
?CND189: GET P-ITBL,P-VERB
|
||||
ZERO? STACK \?CND193
|
||||
PUT P-ITBL,P-VERB,ACT?$CALL
|
||||
?CND184: CALL SYNTAX-CHECK
|
||||
?CND193: CALL SYNTAX-CHECK
|
||||
ZERO? STACK /FALSE
|
||||
CALL SNARF-OBJECTS
|
||||
ZERO? STACK /FALSE
|
||||
@@ -247,14 +257,14 @@
|
||||
RSTACK
|
||||
|
||||
|
||||
.FUNCT CLAUSE,PTR,VAL,WORD,OFF,NUM,ANDFLG=0,FIRST??=1,NW,LW=0,?TMP1
|
||||
.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 /?ELS3
|
||||
ADD P-PREP1,OFF >NUM
|
||||
PUT P-ITBL,NUM,VAL
|
||||
ADD NUM,1
|
||||
PUT P-ITBL,STACK,WORD
|
||||
PUT P-ITBL,STACK,WRD
|
||||
ADD PTR,P-LEXELEN >PTR
|
||||
JUMP ?CND1
|
||||
?ELS3: INC 'P-LEN
|
||||
@@ -277,34 +287,34 @@
|
||||
ADD P-LEXV,STACK
|
||||
PUT P-ITBL,?TMP1,STACK
|
||||
RETURN -1
|
||||
?CND14: GET P-LEXV,PTR >WORD
|
||||
CALL BUZZER-WORD?,WORD
|
||||
?CND14: GET P-LEXV,PTR >WRD
|
||||
CALL BUZZER-WORD?,WRD
|
||||
ZERO? STACK \FALSE
|
||||
ZERO? WORD \?THN22
|
||||
CALL NUMBER?,PTR >WORD
|
||||
ZERO? WORD \?THN22
|
||||
CALL NAME?,PTR >WORD
|
||||
ZERO? WORD /?ELS21
|
||||
ZERO? WRD \?THN22
|
||||
CALL NUMBER?,PTR >WRD
|
||||
ZERO? WRD \?THN22
|
||||
CALL NAME?,PTR >WRD
|
||||
ZERO? WRD /?ELS21
|
||||
?THN22: ZERO? P-LEN \?ELS26
|
||||
SET 'NW,0
|
||||
JUMP ?CND24
|
||||
?ELS26: ADD PTR,P-LEXELEN
|
||||
GET P-LEXV,STACK >NW
|
||||
?CND24: EQUAL? WORD,W?OF \?CND29
|
||||
?CND24: EQUAL? WRD,W?OF \?CND29
|
||||
GET P-ITBL,P-VERB
|
||||
EQUAL? STACK,ACT?MAKE \?CND29
|
||||
PUT P-LEXV,PTR,W?WITH
|
||||
SET 'WORD,W?WITH
|
||||
?CND29: EQUAL? WORD,W?AND,W?COMMA \?ELS36
|
||||
SET 'ANDFLG,1
|
||||
SET 'WRD,W?WITH
|
||||
?CND29: EQUAL? WRD,W?AND,W?COMMA \?ELS36
|
||||
SET 'ANDFLG,TRUE-VALUE
|
||||
JUMP ?CND17
|
||||
?ELS36: EQUAL? WORD,W?ONE \?ELS38
|
||||
?ELS36: EQUAL? WRD,W?ONE \?ELS38
|
||||
EQUAL? NW,W?OF \?CND17
|
||||
DEC 'P-LEN
|
||||
ADD PTR,P-LEXELEN >PTR
|
||||
JUMP ?CND17
|
||||
?ELS38: EQUAL? WORD,W?THEN,W?. /?THN44
|
||||
CALL WT?,WORD,PS?PREPOSITION
|
||||
?ELS38: EQUAL? WRD,W?THEN,W?PERIOD /?THN44
|
||||
CALL WT?,WRD,PS?PREPOSITION
|
||||
ZERO? STACK /?ELS43
|
||||
ZERO? FIRST?? \?ELS43
|
||||
?THN44: INC 'P-LEN
|
||||
@@ -317,18 +327,18 @@
|
||||
?ELS43: ZERO? ANDFLG /?ELS49
|
||||
GET P-ITBL,P-VERBN
|
||||
ZERO? STACK /?THN52
|
||||
CALL WT?,WORD,PS?DIRECTION
|
||||
CALL WT?,WRD,PS?DIRECTION
|
||||
ZERO? STACK \?THN52
|
||||
CALL WT?,WORD,PS?VERB
|
||||
CALL WT?,WRD,PS?VERB
|
||||
ZERO? STACK /?ELS49
|
||||
?THN52: SUB PTR,4 >PTR
|
||||
ADD PTR,2
|
||||
PUT P-LEXV,STACK,W?THEN
|
||||
ADD P-LEN,2 >P-LEN
|
||||
JUMP ?CND17
|
||||
?ELS49: CALL WT?,WORD,PS?OBJECT
|
||||
?ELS49: CALL WT?,WRD,PS?OBJECT
|
||||
ZERO? STACK /?ELS55
|
||||
CALL WT?,WORD,PS?ADJECTIVE,P1?ADJECTIVE
|
||||
CALL WT?,WRD,PS?ADJECTIVE,P1?ADJECTIVE
|
||||
ZERO? STACK /?ELS58
|
||||
ZERO? NW /?ELS58
|
||||
CALL WT?,NW,PS?OBJECT
|
||||
@@ -342,22 +352,22 @@
|
||||
ADD P-LEXV,STACK
|
||||
PUT P-ITBL,?TMP1,STACK
|
||||
RETURN PTR
|
||||
?ELS62: SET 'ANDFLG,0
|
||||
?ELS62: SET 'ANDFLG,FALSE-VALUE
|
||||
JUMP ?CND17
|
||||
?ELS55: CALL WT?,WORD,PS?ADJECTIVE
|
||||
?ELS55: CALL WT?,WRD,PS?ADJECTIVE
|
||||
ZERO? STACK \?CND17
|
||||
CALL WT?,WORD,PS?BUZZ-WORD
|
||||
CALL WT?,WRD,PS?BUZZ-WORD
|
||||
ZERO? STACK /?ELS68
|
||||
JUMP ?CND17
|
||||
?ELS68: CALL WT?,WORD,PS?PREPOSITION
|
||||
?ELS68: CALL WT?,WRD,PS?PREPOSITION
|
||||
ZERO? STACK /?ELS72
|
||||
JUMP ?CND17
|
||||
?ELS72: CALL CANT-USE,PTR
|
||||
RFALSE
|
||||
?ELS21: CALL UNKNOWN-WORD,PTR
|
||||
RFALSE
|
||||
?CND17: SET 'LW,WORD
|
||||
SET 'FIRST??,0
|
||||
?CND17: SET 'LW,WRD
|
||||
SET 'FIRST??,FALSE-VALUE
|
||||
ADD PTR,P-LEXELEN >PTR
|
||||
JUMP ?PRG12
|
||||
|
||||
@@ -401,7 +411,7 @@
|
||||
|
||||
|
||||
.FUNCT ORPHAN-MERGE,CNT=-1,TEMP,VERB,BEG,END,ADJ=0,WRD,?TMP1
|
||||
SET 'P-OFLAG,0
|
||||
SET 'P-OFLAG,FALSE-VALUE
|
||||
GET P-ITBL,P-VERB >VERB
|
||||
ZERO? VERB /?ELS3
|
||||
GET P-OTBL,P-VERB
|
||||
@@ -413,67 +423,75 @@
|
||||
GET P-OTBL,P-PREP1
|
||||
EQUAL? TEMP,STACK /?THN13
|
||||
ZERO? TEMP \FALSE
|
||||
?THN13: GET P-ITBL,P-NC1
|
||||
?THN13: ZERO? ADJ /?ELS17
|
||||
ADD P-LEXV,2
|
||||
PUT P-OTBL,P-NC1,STACK
|
||||
ADD P-LEXV,6
|
||||
PUT P-OTBL,P-NC1L,STACK
|
||||
JUMP ?CND1
|
||||
?ELS17: GET P-ITBL,P-NC1
|
||||
PUT P-OTBL,P-NC1,STACK
|
||||
GET P-ITBL,P-NC1L
|
||||
PUT P-OTBL,P-NC1L,STACK
|
||||
JUMP ?CND1
|
||||
?ELS9: GET P-OTBL,P-NC2
|
||||
EQUAL? STACK,1 \?ELS18
|
||||
EQUAL? STACK,1 \?ELS24
|
||||
GET P-ITBL,P-PREP1 >TEMP
|
||||
GET P-OTBL,P-PREP2
|
||||
EQUAL? TEMP,STACK /?THN22
|
||||
EQUAL? TEMP,STACK /?THN28
|
||||
ZERO? TEMP \FALSE
|
||||
?THN22: GET P-ITBL,P-NC1
|
||||
?THN28: 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 ?CND1
|
||||
?ELS18: ZERO? P-ACLAUSE /?CND1
|
||||
EQUAL? P-NCN,1 /?ELS31
|
||||
SET 'P-ACLAUSE,0
|
||||
?ELS24: ZERO? P-ACLAUSE /?CND1
|
||||
EQUAL? P-NCN,1 /?ELS37
|
||||
SET 'P-ACLAUSE,FALSE-VALUE
|
||||
RFALSE
|
||||
?ELS31: GET P-ITBL,P-NC1 >BEG
|
||||
?ELS37: GET P-ITBL,P-NC1 >BEG
|
||||
GET P-ITBL,P-NC1L >END
|
||||
?PRG34: EQUAL? BEG,END \?ELS38
|
||||
ZERO? ADJ /?ELS41
|
||||
?PRG40: EQUAL? BEG,END \?ELS44
|
||||
ZERO? ADJ /?ELS47
|
||||
CALL ACLAUSE-WIN,ADJ
|
||||
JUMP ?CND29
|
||||
?ELS41: SET 'P-ACLAUSE,0
|
||||
JUMP ?CND35
|
||||
?ELS47: SET 'P-ACLAUSE,FALSE-VALUE
|
||||
RFALSE
|
||||
?ELS38: ZERO? ADJ \?ELS46
|
||||
?ELS44: ZERO? ADJ \?ELS52
|
||||
GET BEG,0 >WRD
|
||||
GETB WRD,P-PSOFF
|
||||
BTST STACK,PS?ADJECTIVE \?ELS46
|
||||
BTST STACK,PS?ADJECTIVE \?ELS52
|
||||
SET 'ADJ,WRD
|
||||
JUMP ?CND36
|
||||
?ELS46: GETB WRD,P-PSOFF
|
||||
BTST STACK,PS?OBJECT /?THN51
|
||||
EQUAL? WRD,W?ONE \?CND36
|
||||
?THN51: EQUAL? WRD,P-ANAM,W?ONE \FALSE
|
||||
JUMP ?CND42
|
||||
?ELS52: GETB WRD,P-PSOFF
|
||||
BTST STACK,PS?OBJECT /?THN57
|
||||
EQUAL? WRD,W?ONE \?CND42
|
||||
?THN57: EQUAL? WRD,P-ANAM,W?ONE \FALSE
|
||||
CALL ACLAUSE-WIN,ADJ
|
||||
JUMP ?CND29
|
||||
?CND36: ADD BEG,P-WORDLEN >BEG
|
||||
JUMP ?PRG34
|
||||
?CND29:
|
||||
JUMP ?CND35
|
||||
?CND42: ADD BEG,P-WORDLEN >BEG
|
||||
JUMP ?PRG40
|
||||
?CND35:
|
||||
?CND1:
|
||||
?PRG58: IGRTR? 'CNT,P-ITBLLEN \?ELS62
|
||||
SET 'P-MERGED,1
|
||||
?PRG64: IGRTR? 'CNT,P-ITBLLEN \?ELS68
|
||||
SET 'P-MERGED,TRUE-VALUE
|
||||
RTRUE
|
||||
?ELS62: GET P-OTBL,CNT
|
||||
?ELS68: GET P-OTBL,CNT
|
||||
PUT P-ITBL,CNT,STACK
|
||||
JUMP ?PRG58
|
||||
JUMP ?PRG64
|
||||
|
||||
|
||||
.FUNCT ACLAUSE-WIN,ADJ
|
||||
GET P-OTBL,P-VERB
|
||||
PUT P-ITBL,P-VERB,STACK
|
||||
SET 'P-CCSRC,P-OTBL
|
||||
ADD P-ACLAUSE,1
|
||||
CALL CLAUSE-COPY,P-ACLAUSE,STACK,ADJ
|
||||
GET P-OTBL,P-NC2
|
||||
ZERO? STACK /?ELS2
|
||||
SET 'P-NCN,2
|
||||
?ELS2: SET 'P-ACLAUSE,0
|
||||
?ELS2: SET 'P-ACLAUSE,FALSE-VALUE
|
||||
RTRUE
|
||||
|
||||
|
||||
@@ -486,20 +504,16 @@
|
||||
|
||||
|
||||
.FUNCT UNKNOWN-WORD,PTR,BUF,?TMP1
|
||||
GET UNKNOWN-MSGS,0
|
||||
PRINT STACK
|
||||
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
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'P-OFLAG,0
|
||||
GET UNKNOWN-MSGS,1
|
||||
PRINT STACK
|
||||
CRLF
|
||||
RTRUE
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
SET 'P-OFLAG,FALSE-VALUE
|
||||
PRINTR """.)"
|
||||
|
||||
|
||||
.FUNCT CANT-USE,PTR,BUF,?TMP1
|
||||
@@ -512,9 +526,9 @@
|
||||
CALL WORD-PRINT,?TMP1,STACK
|
||||
PRINTI """ when you use it that way.)"
|
||||
CRLF
|
||||
SET 'QUOTE-FLAG,0
|
||||
SET 'P-OFLAG,0
|
||||
RTRUE
|
||||
SET 'QUOTE-FLAG,FALSE-VALUE
|
||||
SET 'P-OFLAG,FALSE-VALUE
|
||||
RETURN P-OFLAG
|
||||
|
||||
|
||||
.FUNCT SYNTAX-CHECK,SYN,LEN,NUM,OBJ,DRIVE1=0,DRIVE2=0,PREP,VERB,?TMP2,?TMP1
|
||||
@@ -586,18 +600,18 @@
|
||||
?ELS50: EQUAL? WINNER,PLAYER \?ELS57
|
||||
CALL ORPHAN,DRIVE1,DRIVE2
|
||||
PRINTI "(Wh"
|
||||
EQUAL? VERB,ACT?WALK,ACT?CRAWL \?ELS64
|
||||
PUSH STR?131
|
||||
EQUAL? VERB,ACT?WALK \?ELS64
|
||||
PUSH STR?122
|
||||
JUMP ?CND60
|
||||
?ELS64: PUSH STR?132
|
||||
?ELS64: PUSH STR?123
|
||||
?CND60: PRINT STACK
|
||||
PRINTI " do you want to "
|
||||
JUMP ?CND55
|
||||
?ELS57: PRINTI "(Your command was not complete. Next time, type wh"
|
||||
EQUAL? VERB,ACT?WALK \?ELS75
|
||||
PUSH STR?131
|
||||
PUSH STR?122
|
||||
JUMP ?CND71
|
||||
?ELS75: PUSH STR?132
|
||||
?ELS75: PUSH STR?123
|
||||
?CND71: PRINT STACK
|
||||
PRINTI " you want "
|
||||
PRINTD WINNER
|
||||
@@ -611,11 +625,11 @@
|
||||
?ELS86: GETB DRIVE2,P-SPREP2
|
||||
?CND82: CALL PREP-PRINT,STACK
|
||||
EQUAL? WINNER,PLAYER \?ELS92
|
||||
SET 'P-OFLAG,1
|
||||
SET 'P-OFLAG,TRUE-VALUE
|
||||
PRINTI "?)"
|
||||
CRLF
|
||||
RFALSE
|
||||
?ELS92: SET 'P-OFLAG,0
|
||||
?ELS92: SET 'P-OFLAG,FALSE-VALUE
|
||||
PRINTI ".)"
|
||||
CRLF
|
||||
RFALSE
|
||||
@@ -672,24 +686,24 @@
|
||||
.FUNCT BUFFER-PRINT,BEG,END,CP,NOSP=0,WRD,FIRST??=1,PN=0,?TMP1
|
||||
?PRG1: EQUAL? BEG,END /TRUE
|
||||
ZERO? NOSP /?ELS10
|
||||
SET 'NOSP,0
|
||||
SET 'NOSP,FALSE-VALUE
|
||||
JUMP ?CND8
|
||||
?ELS10: PRINTI " "
|
||||
?CND8: GET BEG,0 >WRD
|
||||
EQUAL? WRD,W?. \?ELS18
|
||||
SET 'NOSP,1
|
||||
EQUAL? WRD,W?PERIOD \?ELS18
|
||||
SET 'NOSP,TRUE-VALUE
|
||||
JUMP ?CND3
|
||||
?ELS18: EQUAL? WRD,W?DR \?ELS20
|
||||
PRINTI "Dr."
|
||||
SET 'PN,1
|
||||
SET 'PN,TRUE-VALUE
|
||||
JUMP ?CND3
|
||||
?ELS20: EQUAL? WRD,W?HIM,W?HER,W?ME \?ELS24
|
||||
SET 'PN,1
|
||||
SET 'PN,TRUE-VALUE
|
||||
JUMP ?CND3
|
||||
?ELS24: CALL CAPITAL-NOUN?,WRD
|
||||
ZERO? STACK /?ELS26
|
||||
CALL CAPITALIZE,BEG
|
||||
SET 'PN,1
|
||||
SET 'PN,TRUE-VALUE
|
||||
JUMP ?CND3
|
||||
?ELS26: ZERO? FIRST?? /?CND29
|
||||
ZERO? PN \?CND29
|
||||
@@ -717,7 +731,7 @@
|
||||
?ELS50: GETB BEG,2 >?TMP1
|
||||
GETB BEG,3
|
||||
CALL WORD-PRINT,?TMP1,STACK
|
||||
?CND36: SET 'FIRST??,0
|
||||
?CND36: SET 'FIRST??,FALSE-VALUE
|
||||
?CND3: ADD BEG,P-WORDLEN >BEG
|
||||
JUMP ?PRG1
|
||||
|
||||
@@ -818,14 +832,14 @@
|
||||
?CND1: SET 'P-GWIMBIT,GBIT
|
||||
SET 'P-SLOCBITS,LBIT
|
||||
PUT P-MERGE,P-MATCHLEN,0
|
||||
CALL GET-OBJECT,P-MERGE,0
|
||||
CALL GET-OBJECT,P-MERGE,FALSE-VALUE
|
||||
ZERO? STACK /?ELS8
|
||||
SET 'P-GWIMBIT,0
|
||||
GET P-MERGE,P-MATCHLEN
|
||||
EQUAL? STACK,1 \FALSE
|
||||
GET P-MERGE,1 >OBJ
|
||||
PRINTI "("
|
||||
CALL PREP-PRINT,PREP,0
|
||||
CALL PREP-PRINT,PREP,FALSE-VALUE
|
||||
ZERO? STACK /?CND16
|
||||
CALL THE?,OBJ
|
||||
PRINTI " "
|
||||
@@ -883,13 +897,14 @@
|
||||
RETURN NTBL
|
||||
|
||||
|
||||
.FUNCT SNARFEM,PTR,EPTR,TBL,AND=0,BUT=0,LEN,WV,WORD,NW
|
||||
.FUNCT SNARFEM,PTR,EPTR,TBL,BUT=0,LEN,WV,WRD,NW
|
||||
SET 'P-AND,FALSE-VALUE
|
||||
SET 'P-GETFLAGS,0
|
||||
SET 'P-CSPTR,PTR
|
||||
SET 'P-CEPTR,EPTR
|
||||
PUT P-BUTS,P-MATCHLEN,0
|
||||
PUT TBL,P-MATCHLEN,0
|
||||
GET PTR,0 >WORD
|
||||
GET PTR,0 >WRD
|
||||
?PRG1: EQUAL? PTR,EPTR \?ELS5
|
||||
ZERO? BUT /?ORP9
|
||||
PUSH BUT
|
||||
@@ -898,9 +913,9 @@
|
||||
?THN6: CALL GET-OBJECT,STACK
|
||||
RETURN STACK
|
||||
?ELS5: GET PTR,P-LEXELEN >NW
|
||||
CALL BUZZER-WORD?,WORD
|
||||
CALL BUZZER-WORD?,WRD
|
||||
ZERO? STACK \FALSE
|
||||
EQUAL? WORD,W?A,W?ONE \?ELS16
|
||||
EQUAL? WRD,W?A,W?ONE \?ELS16
|
||||
ZERO? P-ADJ \?ELS19
|
||||
SET 'P-GETFLAGS,P-ONE
|
||||
EQUAL? NW,W?OF \?CND3
|
||||
@@ -915,8 +930,9 @@
|
||||
ZERO? STACK /FALSE
|
||||
ZERO? NW /TRUE
|
||||
JUMP ?CND3
|
||||
?ELS16: EQUAL? WORD,W?AND,W?COMMA \?ELS34
|
||||
?ELS16: EQUAL? WRD,W?AND,W?COMMA \?ELS34
|
||||
EQUAL? NW,W?AND,W?COMMA /?ELS34
|
||||
SET 'P-AND,TRUE-VALUE
|
||||
ZERO? BUT /?ORP42
|
||||
PUSH BUT
|
||||
JUMP ?THN39
|
||||
@@ -924,29 +940,29 @@
|
||||
?THN39: CALL GET-OBJECT,STACK
|
||||
ZERO? STACK \?CND12
|
||||
RFALSE
|
||||
?ELS34: CALL WT?,WORD,PS?BUZZ-WORD
|
||||
?ELS34: CALL WT?,WRD,PS?BUZZ-WORD
|
||||
ZERO? STACK /?ELS44
|
||||
JUMP ?CND3
|
||||
?ELS44: EQUAL? WORD,W?AND,W?COMMA \?ELS46
|
||||
?ELS44: EQUAL? WRD,W?AND,W?COMMA \?ELS46
|
||||
JUMP ?CND3
|
||||
?ELS46: EQUAL? WORD,W?OF \?ELS48
|
||||
?ELS46: EQUAL? WRD,W?OF \?ELS48
|
||||
ZERO? P-GETFLAGS \?CND12
|
||||
SET 'P-GETFLAGS,P-INHIBIT
|
||||
JUMP ?CND12
|
||||
?ELS48: CALL WT?,WORD,PS?ADJECTIVE,P1?ADJECTIVE >WV
|
||||
?ELS48: CALL WT?,WRD,PS?ADJECTIVE,P1?ADJECTIVE >WV
|
||||
ZERO? WV /?ELS53
|
||||
ZERO? P-ADJ \?ELS53
|
||||
SET 'P-ADJ,WV
|
||||
SET 'P-ADJN,WORD
|
||||
SET 'P-ADJN,WRD
|
||||
JUMP ?CND3
|
||||
?ELS53: CALL WT?,WORD,PS?OBJECT,P1?OBJECT
|
||||
?ELS53: CALL WT?,WRD,PS?OBJECT,P1?OBJECT
|
||||
ZERO? STACK /?CND3
|
||||
SET 'P-NAM,WORD
|
||||
SET 'P-ONEOBJ,WORD
|
||||
SET 'P-NAM,WRD
|
||||
SET 'P-ONEOBJ,WRD
|
||||
?CND12:
|
||||
?CND3: EQUAL? PTR,EPTR /?PRG1
|
||||
ADD PTR,P-WORDLEN >PTR
|
||||
SET 'WORD,NW
|
||||
SET 'WRD,NW
|
||||
JUMP ?PRG1
|
||||
|
||||
|
||||
@@ -960,11 +976,11 @@
|
||||
CALL WT?,P-ADJN,PS?OBJECT,P1?OBJECT
|
||||
ZERO? STACK /?ELS11
|
||||
SET 'P-NAM,P-ADJN
|
||||
SET 'P-ADJ,0
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
JUMP ?CND4
|
||||
?ELS11: CALL WT?,P-ADJN,PS?DIRECTION,P1?DIRECTION >BTS
|
||||
ZERO? BTS /?CND4
|
||||
SET 'P-ADJ,0
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
PUT TBL,P-MATCHLEN,1
|
||||
PUT TBL,1,INTDIR
|
||||
SET 'P-DIRECTION,BTS
|
||||
@@ -1027,8 +1043,8 @@
|
||||
EQUAL? OBJ,NOT-HERE-OBJECT /FALSE
|
||||
PUT TBL,1,OBJ
|
||||
PUT TBL,P-MATCHLEN,1
|
||||
SET 'P-NAM,0
|
||||
SET 'P-ADJ,0
|
||||
SET 'P-NAM,FALSE-VALUE
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
RTRUE
|
||||
?ELS68: ZERO? VRB /?ELS75
|
||||
ZERO? P-NAM /?ELS75
|
||||
@@ -1040,33 +1056,34 @@
|
||||
?CND78: SET 'P-ACLAUSE,STACK
|
||||
SET 'P-AADJ,P-ADJ
|
||||
SET 'P-ANAM,P-NAM
|
||||
CALL ORPHAN,0,0
|
||||
SET 'P-OFLAG,1
|
||||
CALL ORPHAN,FALSE-VALUE,FALSE-VALUE
|
||||
SET 'P-OFLAG,TRUE-VALUE
|
||||
JUMP ?CND66
|
||||
?ELS75: ZERO? VRB /?CND66
|
||||
CALL MISSING-NOUN,ADJ
|
||||
?CND66: SET 'P-NAM,0
|
||||
SET 'P-ADJ,0
|
||||
?CND66: SET 'P-NAM,FALSE-VALUE
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
RFALSE
|
||||
?ELS53: ZERO? LEN \?ELS89
|
||||
ZERO? GCHECK /?ELS89
|
||||
ZERO? VRB /?CND92
|
||||
SET 'P-SLOCBITS,XBITS
|
||||
ZERO? LIT /?ELS98
|
||||
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,0
|
||||
SET 'P-ADJ,0
|
||||
SET 'P-ADJN,0
|
||||
SET 'P-NAM,FALSE-VALUE
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
SET 'P-ADJN,FALSE-VALUE
|
||||
RTRUE
|
||||
?ELS98: PRINTI "(It's too dark to see!)"
|
||||
CRLF
|
||||
?CND92: SET 'P-NAM,0
|
||||
SET 'P-ADJ,0
|
||||
?CND92: SET 'P-NAM,FALSE-VALUE
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
RFALSE
|
||||
?ELS89: ZERO? LEN \?CND40
|
||||
SET 'GCHECK,1
|
||||
SET 'GCHECK,TRUE-VALUE
|
||||
JUMP ?PRG28
|
||||
?CND40: ZERO? P-ADJ /?CND106
|
||||
ZERO? P-NAM \?CND106
|
||||
@@ -1077,8 +1094,8 @@
|
||||
PRINTI ".)"
|
||||
CRLF
|
||||
?CND106: SET 'P-SLOCBITS,XBITS
|
||||
SET 'P-NAM,0
|
||||
SET 'P-ADJ,0
|
||||
SET 'P-NAM,FALSE-VALUE
|
||||
SET 'P-ADJ,FALSE-VALUE
|
||||
RTRUE
|
||||
|
||||
|
||||
@@ -1121,14 +1138,15 @@
|
||||
SET 'RLEN,LEN
|
||||
PRINTI "(Which"
|
||||
ZERO? P-OFLAG \?THN6
|
||||
ZERO? P-MERGED /?ELS5
|
||||
ZERO? P-MERGED \?THN6
|
||||
ZERO? P-AND /?ELS5
|
||||
?THN6: PRINTI " "
|
||||
PRINTB P-NAM
|
||||
JUMP ?CND3
|
||||
?ELS5: EQUAL? TBL,P-PRSO \?ELS11
|
||||
CALL CLAUSE-PRINT,P-NC1,P-NC1L,0
|
||||
CALL CLAUSE-PRINT,P-NC1,P-NC1L,FALSE-VALUE
|
||||
JUMP ?CND3
|
||||
?ELS11: CALL CLAUSE-PRINT,P-NC2,P-NC2L,0
|
||||
?ELS11: CALL CLAUSE-PRINT,P-NC2,P-NC2L,FALSE-VALUE
|
||||
?CND3: PRINTI " do you mean,"
|
||||
?PRG16: INC 'TLEN
|
||||
GET TBL,TLEN >OBJ
|
||||
@@ -1165,6 +1183,7 @@
|
||||
?PRG15: MUL CNT,2
|
||||
GET RMG,STACK
|
||||
EQUAL? P-NAM,STACK \?ELS19
|
||||
SET 'LAST-PSEUDO-LOC,HERE
|
||||
MUL CNT,2
|
||||
ADD STACK,1
|
||||
GET RMG,STACK
|
||||
@@ -1289,13 +1308,13 @@
|
||||
?CND15: IN? OBJ,WINNER /?PRG8
|
||||
SET 'PRSO,OBJ
|
||||
FSET? OBJ,TRYTAKEBIT \?ELS27
|
||||
SET 'TAKEN,1
|
||||
SET 'TAKEN,TRUE-VALUE
|
||||
JUMP ?CND25
|
||||
?ELS27: CALL ITAKE,0
|
||||
EQUAL? STACK,1 \?ELS29
|
||||
SET 'TAKEN,0
|
||||
?ELS27: CALL ITAKE,FALSE-VALUE
|
||||
EQUAL? STACK,TRUE-VALUE \?ELS29
|
||||
SET 'TAKEN,FALSE-VALUE
|
||||
JUMP ?CND25
|
||||
?ELS29: SET 'TAKEN,1
|
||||
?ELS29: SET 'TAKEN,TRUE-VALUE
|
||||
?CND25: ZERO? TAKEN /?ELS34
|
||||
BTST BITS,SHAVE \?ELS34
|
||||
PRINTI "(You aren't holding"
|
||||
@@ -1379,28 +1398,6 @@
|
||||
RFALSE
|
||||
|
||||
|
||||
.FUNCT LIT?,RM,OHERE,LIT=0
|
||||
SET 'P-GWIMBIT,ONBIT
|
||||
SET 'OHERE,HERE
|
||||
SET 'HERE,RM
|
||||
FSET? RM,ONBIT /?THN4
|
||||
ZERO? ALWAYS-LIT /?ELS3
|
||||
?THN4: SET 'LIT,1
|
||||
JUMP ?CND1
|
||||
?ELS3: PUT P-MERGE,P-MATCHLEN,0
|
||||
SET 'P-TABLE,P-MERGE
|
||||
SET 'P-SLOCBITS,-1
|
||||
EQUAL? OHERE,RM \?CND8
|
||||
CALL DO-SL,WINNER,1,1
|
||||
?CND8: CALL DO-SL,RM,1,1
|
||||
GET P-TABLE,P-MATCHLEN
|
||||
GRTR? STACK,0 \?CND1
|
||||
SET 'LIT,1
|
||||
?CND1: SET 'HERE,OHERE
|
||||
SET 'P-GWIMBIT,0
|
||||
RETURN LIT
|
||||
|
||||
|
||||
.FUNCT PRSO-PRINT,PTR
|
||||
PRINTI " "
|
||||
PRINTD PRSO
|
||||
|
||||
Reference in New Issue
Block a user