sorcerer/parser.cmp
historicalsource 9be53d703b Final Revision
2019-04-13 21:15:11 -04:00

1869 lines
58 KiB
Plaintext

;COMPARISON OF SS:<SORCERER>PARSER.ZIL.160 AND SS:<ENCHANTER>GPARSER.ZIL.9
;OPTIONS ARE /3
**** FILE SS:<SORCERER>PARSER.ZIL.160, 1-1 (0)
"PARSER for
SORCERER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved"
;"Parser global variable convention: All parser globals will begin
with 'P-'. Local variables are not restricted in any way."
<SETG SIBREAKS ".,\"">
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 1-1 (0)
"Generic PARSER file for
The ZORK Trilogy
started on 7/28/83 by MARC"
;"WHICH and TRAP retrofixes installed"
"Parser global variable convention: All parser globals will
begin with 'P-'. Local variables are not restricted in any
way.
"
<SETG SIBREAKS ".,\"">
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 1-16 (309)
<GLOBAL P-TABLE 0>
<GLOBAL P-ONEOBJ 0>
<GLOBAL P-SYNTAX 0>
<GLOBAL P-CCSRC 0>
<GLOBAL P-LEN 0>
<GLOBAL P-DIR 0>
;<GLOBAL HERE 0>
<GLOBAL WINNER 0>
<GLOBAL P-LEXV <ITABLE BYTE 120>>
;"INBUF - Input buffer for READ"
<GLOBAL P-INBUF <ITABLE BYTE 60>>
;"Parse-cont variable"
<GLOBAL P-CONT <>>
<GLOBAL P-IT-OBJECT <>>
<GLOBAL LAST-PSEUDO-LOC <>>
;<GLOBAL P-IT-LOC <>>
;"Orphan flag"
<GLOBAL P-OFLAG <>>
<GLOBAL P-MERGED <>>
<GLOBAL P-ACLAUSE <>>
<GLOBAL P-ANAM <>>
<GLOBAL P-AADJ <>>
;"Parser variables and temporaries"
<CONSTANT P-PHRLEN 3>
<CONSTANT P-ORPHLEN 7>
<CONSTANT P-RTLEN 3>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 1-18 (356)
<GLOBAL P-TABLE 0>
<GLOBAL P-ONEOBJ 0>
<GLOBAL P-SYNTAX 0>
<GLOBAL P-CCTBL <TABLE 0 0 0 0>>
;"pointers used by CLAUSE-COPY (source/destination beginning/end pointers)"
<CONSTANT CC-SBPTR 0>
<CONSTANT CC-SEPTR 1>
<CONSTANT CC-DBPTR 2>
<CONSTANT CC-DEPTR 3>
<GLOBAL P-LEN 0>
<GLOBAL P-DIR 0>
<GLOBAL HERE 0>
<GLOBAL WINNER 0>
<GLOBAL P-LEXV
<ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
<GLOBAL AGAIN-LEXV
<ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
<GLOBAL RESERVE-LEXV
<ITABLE 59 (LEXV) 0 #BYTE 0 #BYTE 0> ;<ITABLE BYTE 120>>
<GLOBAL RESERVE-PTR <>>
;"INBUF - Input buffer for READ"
<GLOBAL P-INBUF
<ITABLE 120 (BYTE LENGTH) 0>
;<ITABLE BYTE 60>>
<GLOBAL OOPS-INBUF
<ITABLE 120 (BYTE LENGTH) 0>
;<ITABLE BYTE 60>>
<GLOBAL OOPS-TABLE <TABLE <> <> <> <>>>
<CONSTANT O-PTR 0> "word pointer to unknown token in P-LEXV"
<CONSTANT O-START 1> "word pointer to sentence start in P-LEXV"
<CONSTANT O-LENGTH 2> "byte length of unparsed tokens in P-LEXV"
<CONSTANT O-END 3> "byte pointer to first free byte in OOPS-INBUF"
;"Parse-cont variable"
<GLOBAL P-CONT <>>
<GLOBAL P-IT-OBJECT <>>
;<GLOBAL LAST-PSEUDO-LOC <>>
;"Orphan flag"
<GLOBAL P-OFLAG <>>
<GLOBAL P-MERGED <>>
<GLOBAL P-ACLAUSE <>>
<GLOBAL P-ANAM <>>
<GLOBAL P-AADJ <>>
;"Parser variables and temporaries"
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 2-17 (1559)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 1-86 (2255)
<GLOBAL P-OVTBL <TABLE 0 #BYTE 0 #BYTE 0>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 2-32 (1822)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 1-102 (2562)
<GLOBAL P-END-ON-PREP <>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 2-35 (2046)
all required orphaning, syntax checking, and noun clause lookup."
<ROUTINE PARSER ("AUX" (PTR ,P-LEXSTART) WRD (VAL 0) (VERB <>)
LEN (DIR <>) (NW 0) (LW 0) NUM SCNT (CNT -1))
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN> <RETURN>)
(T <PUT ,P-ITBL .CNT 0>)>>
<SETG P-ADVERB <>>
<SETG P-MERGED <>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 1-107 (2815)
all required orphaning, syntax checking, and noun clause lookup."
<ROUTINE PARSER ("AUX" (PTR ,P-LEXSTART) WRD (VAL 0) (VERB <>) (OF-FLAG <>)
OWINNER OMERGED LEN (DIR <>) (NW 0) (LW 0) (CNT -1))
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN> <RETURN>)
(T
<COND (<NOT ,P-OFLAG>
<PUT ,P-OTBL .CNT <GET ,P-ITBL .CNT>>)>
<PUT ,P-ITBL .CNT 0>)>>
<SET OWINNER ,WINNER>
<SET OMERGED ,P-MERGED>
<SETG P-ADVERB <>>
<SETG P-MERGED <>>
<SETG P-END-ON-PREP <>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-14 (2568)
<COND (<NOT <FSET? <LOC ,WINNER> ,VEHBIT>>
<SETG HERE <LOC ,WINNER>>)>
<SETG LIT <LIT? ,HERE>>)>
<SETG PERFORMING-SPELL <>>
<COND (,P-CONT
<SET PTR ,P-CONT>
<COND (<AND <NOT ,SUPER-BRIEF> <==? ,PLAYER ,WINNER>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-20 (3521)
<SETG HERE <META-LOC ,PLAYER>>
;<COND (<NOT <FSET? <LOC ,WINNER> ,VEHBIT>>
<SETG HERE <LOC ,WINNER>>)>
<SETG LIT <LIT? ,HERE>>)>
<COND (,RESERVE-PTR
<SET PTR ,RESERVE-PTR>
<STUFF ,RESERVE-LEXV ,P-LEXV>
<COND (<AND <NOT ,SUPER-BRIEF> <EQUAL? ,PLAYER ,WINNER>>
<CRLF>)>
<SETG RESERVE-PTR <>>
<SETG P-CONT <>>)
(,P-CONT
<SET PTR ,P-CONT>
<COND (<AND <NOT ,SUPER-BRIEF>
<EQUAL? ,PLAYER ,WINNER>
<NOT <VERB? SAY>>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-33 (3208)
<COND (<0? ,P-LEN> <TELL "I beg your pardon?" CR> <RFALSE>)>
<SET LEN ,P-LEN>
<SETG P-DIR <>>
<SETG P-NCN 0>
<SETG P-GETFLAGS 0>
<REPEAT ()
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-48 (4443)
<COND (<ZERO? ,P-LEN> <TELL "I beg your pardon?" CR> <RFALSE>)>
<COND (<EQUAL? <SET WRD <GET ,P-LEXV .PTR>> ,W?OOPS>
<COND (<EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
,W?PERIOD ,W?COMMA>
<SET PTR <+ .PTR ,P-LEXELEN>>
<SETG P-LEN <- ,P-LEN 1>>)>
<COND (<NOT <G? ,P-LEN 1>>
<TELL "I can't help your clumsiness." CR>
<RFALSE>)
(<GET ,OOPS-TABLE ,O-PTR>
<COND (<AND <G? ,P-LEN 2>
<EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
,W?QUOTE>>
<TELL
"Sorry, you can't correct mistakes in quoted text." CR>
<RFALSE>)
(<G? ,P-LEN 2>
<TELL
"Warning: only the first word after OOPS is used." CR>)>
<PUT ,AGAIN-LEXV <GET ,OOPS-TABLE ,O-PTR>
<GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>
<SETG WINNER .OWINNER> ;"maybe fix oops vs. chars.?"
<INBUF-ADD <GETB ,P-LEXV <+ <* .PTR ,P-LEXELEN> 6>>
<GETB ,P-LEXV <+ <* .PTR ,P-LEXELEN> 7>>
<+ <* <GET ,OOPS-TABLE ,O-PTR> ,P-LEXELEN> 3>>
<STUFF ,AGAIN-LEXV ,P-LEXV>
<SETG P-LEN <GETB ,P-LEXV ,P-LEXWORDS>>
<SET PTR <GET ,OOPS-TABLE ,O-START>>
<INBUF-STUFF ,OOPS-INBUF ,P-INBUF>)
(T
<PUT ,OOPS-TABLE ,O-END <>>
<TELL "There was no word to replace!" CR>
<RFALSE>)>)
(T
<COND (<NOT <EQUAL? .WRD ,W?AGAIN ,W?G>>
<SETG P-NUMBER 0>)>
<PUT ,OOPS-TABLE ,O-END <>>)>
<COND (<EQUAL? <GET ,P-LEXV .PTR> ,W?AGAIN ,W?G>
<COND (<ZERO? <GETB ,OOPS-INBUF 1>>
<TELL "Beg pardon?" CR>
<RFALSE>)
(,P-OFLAG
<TELL "It's difficult to repeat fragments." CR>
<RFALSE>)
(<NOT ,P-WON>
<TELL "That would just repeat a mistake." CR>
<RFALSE>)
(<G? ,P-LEN 1>
<COND (<OR <EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
,W?PERIOD ,W?COMMA ,W?THEN>
<EQUAL? <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>
,W?AND>>
<SET PTR <+ .PTR <* 2 ,P-LEXELEN>>>
<PUTB ,P-LEXV ,P-LEXWORDS
<- <GETB ,P-LEXV ,P-LEXWORDS> 2>>)
(T
<TELL "I couldn't understand that sentence." CR>
<RFALSE>)>)
(T
<SET PTR <+ .PTR ,P-LEXELEN>>
<PUTB ,P-LEXV ,P-LEXWORDS
<- <GETB ,P-LEXV ,P-LEXWORDS> 1>>)>
<COND (<G? <GETB ,P-LEXV ,P-LEXWORDS> 0>
<STUFF ,P-LEXV ,RESERVE-LEXV>
<SETG RESERVE-PTR .PTR>)
(T
<SETG RESERVE-PTR <>>)>
;<SETG P-LEN <GETB ,AGAIN-LEXV ,P-LEXWORDS>>
<SETG WINNER .OWINNER>
<SETG P-MERGED .OMERGED>
<INBUF-STUFF ,OOPS-INBUF ,P-INBUF>
<STUFF ,AGAIN-LEXV ,P-LEXV>
<SET CNT -1>
<SET DIR ,AGAIN-DIR>
<REPEAT ()
<COND (<IGRTR? CNT ,P-ITBLLEN> <RETURN>)
(T <PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>)
(T
<STUFF ,P-LEXV ,AGAIN-LEXV>
<INBUF-STUFF ,P-INBUF ,OOPS-INBUF>
<PUT ,OOPS-TABLE ,O-START .PTR>
<PUT ,OOPS-TABLE ,O-LENGTH <* 4 ,P-LEN>>
<SET LEN
<* 2 <+ .PTR <* ,P-LEXELEN <GETB ,P-LEXV ,P-LEXWORDS>>>>>
<PUT ,OOPS-TABLE ,O-END <+ <GETB ,P-LEXV <- .LEN 1>>
<GETB ,P-LEXV <- .LEN 2>>>>
<SETG RESERVE-PTR <>>
<SET LEN ,P-LEN>
<SETG P-DIR <>>
<SETG P-NCN 0>
<SETG P-GETFLAGS 0>
<REPEAT ()
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-44 (3530)
<COND (<AND <==? .WRD ,W?TO>
<EQUAL? .VERB ,ACT?TELL ;,ACT?ASK>>
<SET WRD ,W?QUOTE>)
(<AND <==? .WRD ,W?THEN>
<NOT .VERB>
<NOT ,QUOTE-FLAG> ;"Last NOT added 7/3">
<PUT ,P-ITBL ,P-VERB ,ACT?TELL>
<PUT ,P-ITBL ,P-VERBN 0>
<SET WRD ,W?QUOTE>)>
<COND ;(<AND <EQUAL? .WRD ,W?PERIOD>
<EQUAL? .LW ,W?MRS ,W?MR ,W?MS>>
<SET LW 0>)
(<OR <EQUAL? .WRD ,W?THEN ,W?PERIOD>
<EQUAL? .WRD ,W?QUOTE>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-145 (7989)
<COND (<ZERO? ,P-LEN> <SET NW 0>)
(T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
<COND (<AND <EQUAL? .WRD ,W?TO>
<EQUAL? .VERB ,ACT?TELL ;,ACT?ASK>>
<SET WRD ,W?QUOTE>)
(<AND <EQUAL? .WRD ,W?THEN>
<G? ,P-LEN 0>
<NOT .VERB>
<NOT ,QUOTE-FLAG> ;"Last NOT added 7/3">
<COND (<EQUAL? .LW 0 ,W?PERIOD>
<SET WRD ,W?THE>)
(ELSE
<PUT ,P-ITBL ,P-VERB ,ACT?TELL>
<PUT ,P-ITBL ,P-VERBN 0>
<SET WRD ,W?QUOTE>)>)>
<COND (<EQUAL? .WRD ,W?THEN ,W?PERIOD ,W?QUOTE>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-61 (4143)
(T
<SETG QUOTE-FLAG T>)>)>
<OR <0? ,P-LEN>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-164 (8688)
(T <SETG QUOTE-FLAG T>)>)>
<OR <ZERO? ,P-LEN>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-71 (4413)
<EQUAL? .VERB <> ,ACT?WALK ;,ACT?FLY>
<OR <==? .LEN 1>
<AND <==? .LEN 2>
<EQUAL? .VERB ,ACT?WALK ;,ACT?FLY>>
<AND <EQUAL? <SET NW
<GET ,P-LEXV
<+ .PTR ,P-LEXELEN>>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-173 (8951)
%<COND (<==? ,ZORK-NUMBER 4>
'<EQUAL? .VERB <>
,ACT?WALK ,ACT?FLY>)
(ELSE
'<EQUAL? .VERB <>
,ACT?WALK>)>
<OR <EQUAL? .LEN 1>
<AND <EQUAL? .LEN 2>
<EQUAL? .VERB ,ACT?WALK>>
<AND <EQUAL? .NW
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-83 (4790)
<==? .LEN 2>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-188 (9378)
<EQUAL? .LEN 2>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-96 (5200)
<NOT .VERB> ;<OR <NOT .VERB>
<EQUAL? .VERB ,ACT?WHAT>>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-201 (9791)
<NOT .VERB>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-103 (5451)
<SET NUM
<+ <* .PTR 2> 2>>>>
<PUTB ,P-VTBL 3 <GETB ,P-LEXV <+ .NUM 1>>>)
(<OR <SET VAL <WT? .WRD ,PS?PREPOSITION 0>>
<AND <OR <EQUAL? .WRD ,W?ALL ,W?ONE ,W?BOTH
;,W?A>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-207 (9987)
<SET CNT
<+ <* .PTR 2> 2>>>>
<PUTB ,P-VTBL 3 <GETB ,P-LEXV <+ .CNT 1>>>)
(<OR <SET VAL <WT? .WRD ,PS?PREPOSITION 0>>
<AND <OR <EQUAL? .WRD ,W?ALL ,W?ONE ;,W?BOTH>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-112 (5772)
<COND (<AND <G? ,P-LEN 0>
<==? <GET ,P-LEXV
<+ .PTR ,P-LEXELEN>>
,W?OF>
;<NOT <EQUAL? .VERB ,ACT?ACCUSE>>
<0? .VAL>
<NOT
<EQUAL? .WRD ,W?ALL ,W?ONE ,W?A>>
<NOT
<EQUAL? .WRD ,W?BOTH>>>)
(<AND <NOT <0? .VAL>>
<OR <0? ,P-LEN>
<EQUAL? <GET ,P-LEXV <+ .PTR 2>>
,W?THEN ,W?PERIOD>>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-215 (10288)
<COND (<AND <G? ,P-LEN 1>
<EQUAL? .NW ,W?OF>
<ZERO? .VAL>
<NOT <EQUAL? .WRD
,W?ALL ,W?ONE ,W?A>>
;<NOT <EQUAL? .WRD ,W?BOTH>>>
<SET OF-FLAG T>)
(<AND <NOT <ZERO? .VAL>>
<OR <ZERO? ,P-LEN>
<EQUAL? .NW ,W?THEN ,W?PERIOD>>>
<SETG P-END-ON-PREP T>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-129 (6301)
(<==? ,P-NCN 2>
<TELL
"I found too many nouns in that sentence." CR>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-229 (10755)
(<EQUAL? ,P-NCN 2>
<TELL
"There were too many nouns in that sentence." CR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-135 (6458)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-235 (10918)
<SETG P-ACT .VERB>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-140 (6607)
;(<OR <EQUAL? .WRD ,W?CAREFULLY ,W?QUIETLY>
<EQUAL? .WRD ,W?SLOWLY ,W?QUICKLY
,W?BRIEFLY>>
<SETG P-ADVERB .WRD>)
(<WT? .WRD ,PS?BUZZ-WORD>)
(<AND <EQUAL? .VERB ,ACT?TELL>
<WT? .WRD ,PS?VERB ,P1?VERB>>
<TELL
"Please consult your manual for the correct way to talk to characters." CR>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-241 (11096)
(<EQUAL? .WRD ,W?OF>
<COND (<OR <NOT .OF-FLAG>
<EQUAL? .NW ,W?PERIOD ,W?THEN>>
<CANT-USE .PTR>
<RFALSE>)
(T
<SET OF-FLAG <>>)>)
(<WT? .WRD ,PS?BUZZ-WORD>)
(<AND <EQUAL? .VERB ,ACT?TELL>
<WT? .WRD ,PS?VERB ,P1?VERB>
<EQUAL? ,WINNER ,PLAYER>>
<TELL
"Please consult your manual for the correct way to talk to other people
or creatures." CR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-157 (7127)
<SET PTR <+ .PTR ,P-LEXELEN>>>
<COND (.DIR
<SETG PRSA ,V?WALK>
;<COND (<EQUAL? .VERB ,ACT?FLY>
<SETG TRY-FLY T>)
(T
<SETG TRY-FLY <>>)>
<SETG PRSO .DIR>
<SETG P-WALK-DIR .DIR>
<RETURN T>)>
<SETG P-WALK-DIR <>>
<COND (,P-OFLAG <ORPHAN-MERGE>)>
;<COND (<==? <GET ,P-ITBL ,P-VERB> 0> <PUT ,P-ITBL ,P-VERB ,ACT?CALL>)>
<COND (<AND <SYNTAX-CHECK> <SNARF-OBJECTS> <MANY-CHECK> <TAKE-CHECK>>
T)>>
;<GLOBAL TRY-FLY <>>
<GLOBAL P-WALK-DIR <>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-263 (11705)
<SET PTR <+ .PTR ,P-LEXELEN>>>)>
<PUT ,OOPS-TABLE ,O-PTR <>>
<COND (.DIR
<SETG PRSA ,V?WALK>
%<COND (<==? ,ZORK-NUMBER 4>
'<COND (<EQUAL? .VERB ,ACT?FLY>
<SETG TRY-FLY T>)
(T
<SETG TRY-FLY <>>)>)
(ELSE '<NULL-F>)>
<SETG PRSO .DIR>
<SETG P-OFLAG <>>
<SETG P-WALK-DIR .DIR>
<SETG AGAIN-DIR .DIR>)
(ELSE
<COND (,P-OFLAG <ORPHAN-MERGE>)>
<SETG P-WALK-DIR <>>
<SETG AGAIN-DIR <>>
<COND (<AND <SYNTAX-CHECK>
<SNARF-OBJECTS>
<MANY-CHECK>
<TAKE-CHECK>>
T)>)>>
<COND (<==? ,ZORK-NUMBER 4>
<GLOBAL TRY-FLY <>>)>
<GLOBAL P-ACT <>>
<GLOBAL P-WALK-DIR <>>
<GLOBAL AGAIN-DIR <>>
;"For AGAIN purposes, put contents of one LEXV table into another."
<ROUTINE STUFF (SRC DEST "OPTIONAL" (MAX 29) "AUX" (PTR ,P-LEXSTART) (CTR 1)
BPTR)
<PUTB .DEST 0 <GETB .SRC 0>>
<PUTB .DEST 1 <GETB .SRC 1>>
<REPEAT ()
<PUT .DEST .PTR <GET .SRC .PTR>>
<SET BPTR <+ <* .PTR 2> 2>>
<PUTB .DEST .BPTR <GETB .SRC .BPTR>>
<SET BPTR <+ <* .PTR 2> 3>>
<PUTB .DEST .BPTR <GETB .SRC .BPTR>>
<SET PTR <+ .PTR ,P-LEXELEN>>
<COND (<IGRTR? CTR .MAX>
<RETURN>)>>>
;"Put contents of one INBUF into another"
<ROUTINE INBUF-STUFF (SRC DEST "AUX" CNT)
<SET CNT <- <GETB .SRC 0> 1>>
<REPEAT ()
<PUTB .DEST .CNT <GETB .SRC .CNT>>
<COND (<DLESS? CNT 0> <RETURN>)>>>
;"Put the word in the positions specified from P-INBUF to the end of
OOPS-INBUF, leaving the appropriate pointers in AGAIN-LEXV"
<ROUTINE INBUF-ADD (LEN BEG SLOT "AUX" DBEG (CTR 0) TMP)
<COND (<SET TMP <GET ,OOPS-TABLE ,O-END>>
<SET DBEG .TMP>)
(T
<SET DBEG <+ <GETB ,AGAIN-LEXV
<SET TMP <GET ,OOPS-TABLE ,O-LENGTH>>>
<GETB ,AGAIN-LEXV <+ .TMP 1>>>>)>
<PUT ,OOPS-TABLE ,O-END <+ .DBEG .LEN>>
<REPEAT ()
<PUTB ,OOPS-INBUF <+ .DBEG .CTR> <GETB ,P-INBUF <+ .BEG .CTR>>>
<SET CTR <+ .CTR 1>>
<COND (<EQUAL? .CTR .LEN> <RETURN>)>>
<PUTB ,AGAIN-LEXV .SLOT .DBEG>
<PUTB ,AGAIN-LEXV <- .SLOT 1> .LEN>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 3-180 (7876)
for that part of speech to be returned."
<ROUTINE WT? (PTR BIT "OPTIONAL" (B1 5) "AUX" (OFFS ,P-P1OFF) TYP)
<COND (<BTST <SET TYP <GETB .PTR ,P-PSOFF>> .BIT>
<COND (<G? .B1 4>
<RTRUE>)
(T
<SET TYP <BAND .TYP ,P-P1BITS>>
<COND (<NOT <==? .TYP .B1>> <SET OFFS <+ .OFFS 1>>)>
<GETB .PTR .OFFS>)>)>>
;" Scan through a noun clause, leave a pointer to its starting location"
<ROUTINE CLAUSE (PTR VAL WRD "AUX" OFF NUM (ANDFLG <>) (FIRST?? T) NW (LW 0))
<SET OFF <* <- ,P-NCN 1> 2>>
<COND (<NOT <==? .VAL 0>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 2-336 (14065)
for that part of speech to be returned."
<ROUTINE WT? (PTR BIT "OPTIONAL" (B1 5) "AUX" (OFFS ,P-P1OFF) TYP)
<COND (<BTST <SET TYP <GETB .PTR ,P-PSOFF>> .BIT>
<COND (<G? .B1 4> <RTRUE>)
(T
<SET TYP <BAND .TYP ,P-P1BITS>>
<COND (<NOT <EQUAL? .TYP .B1>> <SET OFFS <+ .OFFS 1>>)>
<GETB .PTR .OFFS>)>)>>
;" Scan through a noun clause, leave a pointer to its starting location"
<ROUTINE CLAUSE (PTR VAL WRD "AUX" OFF NUM (ANDFLG <>) (FIRST?? T) NW (LW 0))
<SET OFF <* <- ,P-NCN 1> 2>>
<COND (<NOT <EQUAL? .VAL 0>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-19 (8626)
<COND (<0? ,P-LEN> <SETG P-NCN <- ,P-NCN 1>> <RETURN -1>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-19 (14811)
<COND (<ZERO? ,P-LEN> <SETG P-NCN <- ,P-NCN 1>> <RETURN -1>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-29 (9085)
<COND (<0? ,P-LEN> <SET NW 0>)
(T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
;<COND (<AND <==? .WRD ,W?OF>
<==? <GET ,P-ITBL ,P-VERB> ,ACT?ACCUSE>>
<PUT ,P-LEXV .PTR ,W?WITH>
<SET WRD ,W?WITH>)>
<COND ;(<AND <EQUAL? .WRD ,W?PERIOD>
<EQUAL? .LW ,W?MRS ,W?MR ,W?MS>>
<SET LW 0>)
(<EQUAL? .WRD ,W?AND ,W?COMMA> <SET ANDFLG T>)
(<EQUAL? .WRD ,W?ALL ,W?ONE ,W?BOTH>
<COND (<==? .NW ,W?OF>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-29 (15273)
<COND (<ZERO? ,P-LEN> <SET NW 0>)
(T <SET NW <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
<COND (<EQUAL? .WRD ,W?AND ,W?COMMA> <SET ANDFLG T>)
(<EQUAL? .WRD ,W?ALL ,W?ONE ;,W?BOTH>
<COND (<EQUAL? .NW ,W?OF>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-54 (10039)
<COND ;"First clause added 1/10/84 to fix
'verb AT synonym OF synonym' bug"
(<AND <G? ,P-LEN 0>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-47 (15975)
<COND (<AND <G? ,P-LEN 0>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-63 (10335)
<NOT <==? .NW 0>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-54 (16174)
<NOT <EQUAL? .NW 0>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-79 (10850)
<EQUAL? <GET ,P-ITBL ,P-VERB> 0>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-70 (16692)
<OR <WT? .WRD ,PS?DIRECTION>
<WT? .WRD ,PS?VERB>>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-90 (11183)
<SET PTR <+ .PTR ,P-LEXELEN>>>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-82 (17054)
<SET PTR <+ .PTR ,P-LEXELEN>>>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-99 (11490)
<COND (<==? .CHR 58>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-91 (17360)
<COND (<EQUAL? .CHR 58>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 4-117 (12007)
<GLOBAL P-DIRECTION 0>
<ROUTINE ORPHAN-MERGE ("AUX" (CNT -1) TEMP VERB BEG END (ADJ <>) WRD)
<SETG P-OFLAG <>>
<COND
(<AND <NOT <ZERO? <SET VERB <GET ,P-ITBL ,P-VERB>>>>
<NOT <==? .VERB <GET ,P-OTBL ,P-VERB>>>>
<RFALSE>)
(<==? ,P-NCN 2>
<RFALSE>)
(<==? <GET ,P-OTBL ,P-NC1> 1>
<COND (<OR <==? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
<GET ,P-OTBL ,P-PREP1>>
<ZERO? .TEMP>>
<PUT ,P-OTBL ,P-NC1 <GET ,P-ITBL ,P-NC1>>
<PUT ,P-OTBL ,P-NC1L <GET ,P-ITBL ,P-NC1L>>)
(T <RFALSE>)>)
(<==? <GET ,P-OTBL ,P-NC2> 1>
<COND (<OR <==? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
<GET ,P-OTBL ,P-PREP2>>
<ZERO? .TEMP>>
<PUT ,P-OTBL ,P-NC2 <GET ,P-ITBL ,P-NC1>>
<PUT ,P-OTBL ,P-NC2L <GET ,P-ITBL ,P-NC1L>>
<SETG P-NCN 2>)
(T <RFALSE>)>)
(,P-ACLAUSE
<COND
(<NOT <==? ,P-NCN 1>> <SETG P-ACLAUSE <>> <RFALSE>)
(T
<SET BEG <GET ,P-ITBL ,P-NC1>>
<SET END <GET ,P-ITBL ,P-NC1L>>
<REPEAT ()
<COND (<==? .BEG .END>
<COND (.ADJ
<ACLAUSE-WIN .ADJ>
<RETURN>)
(T
<SETG P-ACLAUSE <>>
<RFALSE>)>)
(<AND <BTST <GETB <SET WRD <GET .BEG 0>> ,P-PSOFF>
,PS?ADJECTIVE>
<NOT .ADJ>>
<SET ADJ .WRD>)
(<OR <BTST <GETB .WRD ,P-PSOFF> ,PS?OBJECT>
<==? .WRD ,W?ONE>>
<COND (<NOT <EQUAL? .WRD ,P-ANAM ,W?ONE>> <RFALSE>)
(T
<ACLAUSE-WIN .ADJ>
<RETURN>)>)>
<SET BEG <REST .BEG ,P-WORDLEN>>>)>)>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN>
<SETG P-MERGED T>
<RTRUE>)
(T <PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>
T>
<ROUTINE ACLAUSE-WIN (ADJ)
<SETG P-CCSRC ,P-OTBL>
<CLAUSE-COPY ,P-ACLAUSE <+ ,P-ACLAUSE 1> .ADJ>
<AND <NOT <==? <GET ,P-OTBL ,P-NC2> 0>>
<SETG P-NCN 2>>
<SETG P-ACLAUSE <>>
<RTRUE>>
;"Print undefined word in input.
PTR points to the unknown word in P-LEXV"
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 3-110 (17882)
<COND (<==? ,ZORK-NUMBER 3>
<GLOBAL P-DIRECTION 0>)>
;"New ORPHAN-MERGE for TRAP Retrofix 6/21/84"
<ROUTINE ORPHAN-MERGE ("AUX" (CNT -1) TEMP VERB BEG END (ADJ <>) WRD)
<SETG P-OFLAG <>>
<COND (<OR <EQUAL? <WT? <SET WRD <GET <GET ,P-ITBL ,P-VERBN> 0>>
,PS?VERB ,P1?VERB>
<GET ,P-OTBL ,P-VERB>>
<NOT <ZERO? <WT? .WRD ,PS?ADJECTIVE>>>>
<SET ADJ T>)
(<AND <NOT <ZERO? <WT? .WRD ,PS?OBJECT ,P1?OBJECT>>>
<EQUAL? ,P-NCN 0>>
<PUT ,P-ITBL ,P-VERB 0>
<PUT ,P-ITBL ,P-VERBN 0>
<PUT ,P-ITBL ,P-NC1 <REST ,P-LEXV 2>>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>
<SETG P-NCN 1>)>
<COND (<AND <NOT <ZERO? <SET VERB <GET ,P-ITBL ,P-VERB>>>>
<NOT .ADJ>
<NOT <EQUAL? .VERB <GET ,P-OTBL ,P-VERB>>>>
<RFALSE>)
(<EQUAL? ,P-NCN 2> <RFALSE>)
(<EQUAL? <GET ,P-OTBL ,P-NC1> 1>
<COND (<OR <EQUAL? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
<GET ,P-OTBL ,P-PREP1>>
<ZERO? .TEMP>>
<COND (.ADJ
<PUT ,P-OTBL ,P-NC1 <REST ,P-LEXV 2>>
<COND (<ZERO? <GET ,P-ITBL ,P-NC1L>>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>
<COND (<ZERO? ,P-NCN> <SETG P-NCN 1>)>)
(T
<PUT ,P-OTBL ,P-NC1 <GET ,P-ITBL ,P-NC1>>)>
<PUT ,P-OTBL ,P-NC1L <GET ,P-ITBL ,P-NC1L>>)
(T <RFALSE>)>)
(<EQUAL? <GET ,P-OTBL ,P-NC2> 1>
<COND (<OR <EQUAL? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
<GET ,P-OTBL ,P-PREP2>>
<ZERO? .TEMP>>
<COND (.ADJ
<PUT ,P-ITBL ,P-NC1 <REST ,P-LEXV 2>>
<COND (<ZERO? <GET ,P-ITBL ,P-NC1L>>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>)>
<PUT ,P-OTBL ,P-NC2 <GET ,P-ITBL ,P-NC1>>
<PUT ,P-OTBL ,P-NC2L <GET ,P-ITBL ,P-NC1L>>
<SETG P-NCN 2>)
(T <RFALSE>)>)
(<NOT <ZERO? ,P-ACLAUSE>>
<COND (<AND <NOT <EQUAL? ,P-NCN 1>> <NOT .ADJ>>
<SETG P-ACLAUSE <>>
<RFALSE>)
(T
<SET BEG <GET ,P-ITBL ,P-NC1>>
<COND (.ADJ <SET BEG <REST ,P-LEXV 2>> <SET ADJ <>>)>
<SET END <GET ,P-ITBL ,P-NC1L>>
<REPEAT ()
<SET WRD <GET .BEG 0>>
<COND (<EQUAL? .BEG .END>
<COND (.ADJ <ACLAUSE-WIN .ADJ> <RETURN>)
(T <SETG P-ACLAUSE <>> <RFALSE>)>)
(<AND <NOT .ADJ>
<OR <BTST <GETB .WRD ,P-PSOFF>
,PS?ADJECTIVE>
<EQUAL? .WRD ,W?ALL ,W?ONE>>>
<SET ADJ .WRD>)
(<EQUAL? .WRD ,W?ONE>
<ACLAUSE-WIN .ADJ>
<RETURN>)
(<BTST <GETB .WRD ,P-PSOFF> ,PS?OBJECT>
<COND (<EQUAL? .WRD ,P-ANAM>
<ACLAUSE-WIN .ADJ>)
(T
<NCLAUSE-WIN>)>
<RETURN>)>
<SET BEG <REST .BEG ,P-WORDLEN>>
<COND (<EQUAL? .END 0>
<SET END .BEG>
<SETG P-NCN 1>
<PUT ,P-ITBL ,P-NC1 <BACK .BEG 4>>
<PUT ,P-ITBL ,P-NC1L .BEG>)>>)>)>
<PUT ,P-VTBL 0 <GET ,P-OVTBL 0>>
<PUTB ,P-VTBL 2 <GETB ,P-OVTBL 2>>
<PUTB ,P-VTBL 3 <GETB ,P-OVTBL 3>>
<PUT ,P-OTBL ,P-VERBN ,P-VTBL>
<PUTB ,P-VTBL 2 0>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN>
<SETG P-MERGED T>
<RTRUE>)
(T <PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>
T>
;"New ACLAUSE-WIN for TRAP retrofix 6/21/84"
<ROUTINE ACLAUSE-WIN (ADJ)
<PUT ,P-ITBL ,P-VERB <GET ,P-OTBL ,P-VERB>>
<PUT ,P-CCTBL ,CC-SBPTR ,P-ACLAUSE>
<PUT ,P-CCTBL ,CC-SEPTR <+ ,P-ACLAUSE 1>>
<PUT ,P-CCTBL ,CC-DBPTR ,P-ACLAUSE>
<PUT ,P-CCTBL ,CC-DEPTR <+ ,P-ACLAUSE 1>>
<CLAUSE-COPY ,P-OTBL ,P-OTBL .ADJ>
<AND <NOT <EQUAL? <GET ,P-OTBL ,P-NC2> 0>> <SETG P-NCN 2>>
<SETG P-ACLAUSE <>>
<RTRUE>>
<ROUTINE NCLAUSE-WIN ()
<PUT ,P-CCTBL ,CC-SBPTR ,P-NC1>
<PUT ,P-CCTBL ,CC-SEPTR ,P-NC1L>
<PUT ,P-CCTBL ,CC-DBPTR ,P-ACLAUSE>
<PUT ,P-CCTBL ,CC-DEPTR <+ ,P-ACLAUSE 1>>
<CLAUSE-COPY ,P-ITBL ,P-OTBL>
<AND <NOT <EQUAL? <GET ,P-OTBL ,P-NC2> 0>> <SETG P-NCN 2>>
<SETG P-ACLAUSE <>>
<RTRUE>>
;"Print undefined word in input.
PTR points to the unknown word in P-LEXV"
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 6-10 (14191)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-10 (21964)
<PUT ,OOPS-TABLE ,O-PTR .PTR>
<COND (<VERB? SAY>
<TELL "Nothing happens." CR>
<RFALSE>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 6-18 (14422)
<TELL "I can't use the word \"">
<WORD-PRINT <GETB <REST ,P-LEXV <SET BUF <* .PTR 2>>> 2>
<GETB <REST ,P-LEXV .BUF> 3>>
<TELL "\" here." CR>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-22 (22306)
<COND (<VERB? SAY>
<TELL "Nothing happens." CR>
<RFALSE>)>
<TELL "You used the word \"">
<WORD-PRINT <GETB <REST ,P-LEXV <SET BUF <* .PTR 2>>> 2>
<GETB <REST ,P-LEXV .BUF> 3>>
<TELL "\" in a way that I don't understand." CR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 6-28 (14826)
the syntax is saved in P-SYNTAX."
<GLOBAL P-SLOCBITS 0>
<CONSTANT P-SYNLEN 8>
<CONSTANT P-SBITS 0>
<CONSTANT P-SPREP1 1>
<CONSTANT P-SPREP2 2>
<CONSTANT P-SFWIM1 3>
<CONSTANT P-SFWIM2 4>
<CONSTANT P-SLOC1 5>
<CONSTANT P-SLOC2 6>
<CONSTANT P-SACTION 7>
<CONSTANT P-SONUMS 3>
<ROUTINE SYNTAX-CHECK
("AUX" SYN LEN NUM OBJ (DRIVE1 <>) (DRIVE2 <>) PREP VERB TMP)
<COND (<ZERO? <SET VERB <GET ,P-ITBL ,P-VERB>>>
<TELL "I can't find a verb in that sentence!" CR>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-35 (22814)
the syntax is saved in P-SYNTAX."
<GLOBAL P-SLOCBITS 0>
<CONSTANT P-SYNLEN 8>
<CONSTANT P-SBITS 0>
<CONSTANT P-SPREP1 1>
<CONSTANT P-SPREP2 2>
<CONSTANT P-SFWIM1 3>
<CONSTANT P-SFWIM2 4>
<CONSTANT P-SLOC1 5>
<CONSTANT P-SLOC2 6>
<CONSTANT P-SACTION 7>
<CONSTANT P-SONUMS 3>
<ROUTINE SYNTAX-CHECK ("AUX" SYN LEN NUM OBJ
(DRIVE1 <>) (DRIVE2 <>) PREP VERB TMP)
<COND (<ZERO? <SET VERB <GET ,P-ITBL ,P-VERB>>>
<TELL "There was no verb in that sentence!" CR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 7-14 (15618)
<0? ,P-NCN>
<OR <ZERO? <SET PREP <GET ,P-ITBL ,P-PREP1>>>
<==? .PREP <GETB .SYN ,P-SPREP1>>>>
<SET DRIVE1 .SYN>)
(<==? <GETB .SYN ,P-SPREP1> <GET ,P-ITBL ,P-PREP1>>
<COND (<AND <==? .NUM 2> <==? ,P-NCN 1>>
<SET DRIVE2 .SYN>)
(<==? <GETB .SYN ,P-SPREP2> <GET ,P-ITBL ,P-PREP2>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-63 (23554)
<ZERO? ,P-NCN>
<OR <ZERO? <SET PREP <GET ,P-ITBL ,P-PREP1>>>
<EQUAL? .PREP <GETB .SYN ,P-SPREP1>>>>
<SET DRIVE1 .SYN>)
(<EQUAL? <GETB .SYN ,P-SPREP1> <GET ,P-ITBL ,P-PREP1>>
<COND (<AND <EQUAL? .NUM 2> <EQUAL? ,P-NCN 1>>
<SET DRIVE2 .SYN>)
(<EQUAL? <GETB .SYN ,P-SPREP2>
<GET ,P-ITBL ,P-PREP2>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 7-27 (16101)
<TELL "I don't understand that sentence." CR>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-77 (24063)
<TELL
"That sentence isn't one I recognize." CR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 7-46 (16722)
(<EQUAL? .VERB ,ACT?FIND ;,ACT?WHAT>
<TELL "I can't answer that question." CR>
<RFALSE>)
(<NOT <==? ,WINNER ,PROTAGONIST>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-97 (24688)
(<EQUAL? .VERB ,ACT?FIND>
<TELL "That question can't be answered." CR>
<RFALSE>)
(<NOT <EQUAL? ,WINNER ,PLAYER>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 7-55 (17029)
<COND (<==? .TMP 0> <TELL "tell">)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-106 (24985)
<COND (<EQUAL? .TMP 0> <TELL "tell">)
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 7-62 (17254)
<CLAUSE-PRINT ,P-NC1 ,P-NC1L>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-113 (25213)
<TELL " ">
<THING-PRINT T T>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 7-67 (17443)
<RFALSE>)>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 5-119 (25410)
<RFALSE>)>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-3 (17616)
<PUT ,P-OCLAUSE ,P-MATCHLEN 0>
<SETG P-CCSRC ,P-ITBL>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-3 (25582)
<COND (<NOT ,P-MERGED>
<PUT ,P-OCLAUSE ,P-MATCHLEN 0>)>
<PUT ,P-OVTBL 0 <GET ,P-VTBL 0>>
<PUTB ,P-OVTBL 2 <GETB ,P-VTBL 2>>
<PUTB ,P-OVTBL 3 <GETB ,P-VTBL 3>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-8 (17784)
<COND (<==? ,P-NCN 2> <CLAUSE-COPY ,P-NC2 ,P-NC2L>)>
<COND (<NOT <L? ,P-NCN 1>> <CLAUSE-COPY ,P-NC1 ,P-NC1L>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-11 (25868)
<COND (<EQUAL? ,P-NCN 2>
<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>
<CLAUSE-COPY ,P-ITBL ,P-OTBL>)>
<COND (<NOT <L? ,P-NCN 1>>
<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>
<CLAUSE-COPY ,P-ITBL ,P-OTBL>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-15 (18064)
<PUT ,P-OTBL ,P-NC2 1>)>>
<ROUTINE CLAUSE-PRINT (BPTR EPTR "OPTIONAL" (THE? T))
<BUFFER-PRINT <GET ,P-ITBL .BPTR> <GET ,P-ITBL .EPTR> .THE?>>
<ROUTINE BUFFER-PRINT (BEG END CP "AUX" (NOSP <>) WRD (FIRST?? T) (PN <>))
<REPEAT ()
<COND (<==? .BEG .END> <RETURN>)
(T
<COND (.NOSP <SET NOSP <>>)
(T <TELL " ">)>
<COND (<==? <SET WRD <GET .BEG 0>> ,W?PERIOD>
<SET NOSP T>)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-28 (26503)
<PUT ,P-OTBL ,P-NC2 1>)>>
;<ROUTINE CLAUSE-PRINT (BPTR EPTR "OPTIONAL" (THE? T))
<BUFFER-PRINT <GET ,P-ITBL .BPTR> <GET ,P-ITBL .EPTR> .THE?>>
<ROUTINE THING-PRINT (PRSO? "OPTIONAL" (THE? <>) "AUX" BEG END)
<COND (.PRSO?
<SET BEG <GET ,P-ITBL ,P-NC1>>
<SET END <GET ,P-ITBL ,P-NC1L>>)
(ELSE
<SET BEG <GET ,P-ITBL ,P-NC2>>
<SET END <GET ,P-ITBL ,P-NC2L>>)>
<BUFFER-PRINT .BEG .END .THE?>>
<ROUTINE BUFFER-PRINT (BEG END CP
"AUX" (NOSP T) WRD (FIRST?? T) (PN <>) (Q? <>))
<REPEAT ()
<COND (<EQUAL? .BEG .END> <RETURN>)
(T
<SET WRD <GET .BEG 0>>
<COND ;(<EQUAL? .WRD ,W?$BUZZ> T)
(<EQUAL? .WRD ,W?COMMA>
<TELL ", ">)
(.NOSP <SET NOSP <>>)
(ELSE <TELL " ">)>
<COND (<EQUAL? .WRD ,W?PERIOD ,W?COMMA>
<SET NOSP T>)
(<EQUAL? .WRD ,W?ME>
<PRINTD ,ME>
<SET PN T>)
(<EQUAL? .WRD ,W?INTNUM>
<PRINTN ,P-NUMBER>
<SET PN T>)
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-32 (18651)
(<AND <==? .WRD ,W?IT>
<ACCESSIBLE? ,P-IT-OBJECT>
;<==? ,P-IT-LOC ,HERE>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-65 (27661)
(<AND <EQUAL? .WRD ,W?IT>
<ACCESSIBLE? ,P-IT-OBJECT>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-42 (18927)
;<ROUTINE CAPITALIZE (PTR)
<PRINTC <- <GETB ,P-INBUF <GETB .PTR 3>> 32>>
<WORD-PRINT <- <GETB .PTR 2> 1> <+ <GETB .PTR 3> 1>>>
<ROUTINE PREP-PRINT (PREP "AUX" WRD)
<COND (<NOT <0? .PREP>>
<TELL " ">
<COND (<EQUAL? .PREP ,PR?THROUGH>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-74 (27909)
<ROUTINE PREP-PRINT (PREP "AUX" WRD)
<COND (<NOT <ZERO? .PREP>>
<TELL " ">
<COND ;(<EQUAL? .PREP ,PR?THROUGH>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-53 (19265)
<PRINTB .WRD>)>)>>
<ROUTINE CLAUSE-COPY (BPTR EPTR "OPTIONAL" (INSRT <>) "AUX" BEG END)
<SET BEG <GET ,P-CCSRC .BPTR>>
<SET END <GET ,P-CCSRC .EPTR>>
<PUT ,P-OTBL
.BPTR
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-81 (28115)
<PRINTB .WRD>)>)>>
<ROUTINE CLAUSE-COPY (SRC DEST "OPTIONAL" (INSRT <>) "AUX" BEG END)
<SET BEG <GET .SRC <GET ,P-CCTBL ,CC-SBPTR>>>
<SET END <GET .SRC <GET ,P-CCTBL ,CC-SEPTR>>>
<PUT .DEST
<GET ,P-CCTBL ,CC-DBPTR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-63 (19559)
<COND (<==? .BEG .END>
<PUT ,P-OTBL
.EPTR
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-91 (28450)
<COND (<EQUAL? .BEG .END>
<PUT .DEST
<GET ,P-CCTBL ,CC-DEPTR>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 8-71 (19748)
<COND (<AND .INSRT <==? ,P-ANAM <GET .BEG 0>>>
<CLAUSE-ADD .INSRT>)>
<CLAUSE-ADD <GET .BEG 0>>)>
<SET BEG <REST .BEG ,P-WORDLEN>>>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 6-99 (28659)
<COND (<AND .INSRT <EQUAL? ,P-ANAM <GET .BEG 0>>>
<CLAUSE-ADD .INSRT>)>
<CLAUSE-ADD <GET .BEG 0>>)>
<SET BEG <REST .BEG ,P-WORDLEN>>>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 9-6 (20065)
<PUT ,P-OCLAUSE ,P-MATCHLEN .PTR>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 7-6 (28977)
<PUT ,P-OCLAUSE ,P-MATCHLEN .PTR>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 9-12 (20247)
(<==? <GET ,PREPOSITIONS .CNT> .PREP>
<RETURN <GET ,PREPOSITIONS <- .CNT 1>>>)>>>
<ROUTINE SYNTAX-FOUND (SYN)
<SETG P-SYNTAX .SYN>
<SETG PRSA <GETB .SYN ,P-SACTION>>>
<GLOBAL P-GWIMBIT 0>
<ROUTINE GWIM (GBIT LBIT PREP "AUX" OBJ)
<COND (<==? .GBIT ,RLANDBIT>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 7-12 (29155)
(<EQUAL? <GET ,PREPOSITIONS .CNT> .PREP>
<RETURN <GET ,PREPOSITIONS <- .CNT 1>>>)>>>
<ROUTINE SYNTAX-FOUND (SYN)
<SETG P-SYNTAX .SYN>
<SETG PRSA <GETB .SYN ,P-SACTION>>>
<GLOBAL P-GWIMBIT 0>
<ROUTINE GWIM (GBIT LBIT PREP "AUX" OBJ)
<COND (%<COND (<==? ,ZORK-NUMBER 4>
'<EQUAL? .GBIT ,RLANDBIT>)
(ELSE
'<EQUAL? .GBIT ,RMUNGBIT>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 9-29 (20718)
<COND (<==? <GET ,P-MERGE ,P-MATCHLEN> 1>
<SET OBJ <GET ,P-MERGE 1>>
<TELL "(">
<COND (<NOT <0? .PREP>>
<PRINTB <SET PREP <PREP-FIND .PREP>>>
<COND (<==? .PREP ,W?OUT>
<TELL " of">)>
<COND (<NOT <FSET? .OBJ ,NARTICLEBIT>>
<TELL " the ">)
(T
<TELL " ">)>)>
<TELL D .OBJ ")" CR>
.OBJ)>)
(T <SETG P-GWIMBIT 0> <RFALSE>)>>
<ROUTINE SNARF-OBJECTS ("AUX" PTR)
<COND (<NOT <==? <SET PTR <GET ,P-ITBL ,P-NC1>> 0>>
<SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC1>>
<OR <SNARFEM .PTR <GET ,P-ITBL ,P-NC1L> ,P-PRSO> <RFALSE>>
<OR <0? <GET ,P-BUTS ,P-MATCHLEN>>
<SETG P-PRSO <BUT-MERGE ,P-PRSO>>>)>
<COND (<NOT <==? <SET PTR <GET ,P-ITBL ,P-NC2>> 0>>
<SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC2>>
<OR <SNARFEM .PTR <GET ,P-ITBL ,P-NC2L> ,P-PRSI> <RFALSE>>
<COND (<NOT <0? <GET ,P-BUTS ,P-MATCHLEN>>>
<COND (<==? <GET ,P-PRSI ,P-MATCHLEN> 1>
<SETG P-PRSO <BUT-MERGE ,P-PRSO>>)
(T <SETG P-PRSI <BUT-MERGE ,P-PRSI>>)>)>)>
<RTRUE>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 7-32 (29718)
<COND (<EQUAL? <GET ,P-MERGE ,P-MATCHLEN> 1>
<SET OBJ <GET ,P-MERGE 1>>
<TELL "(">
<COND (<AND <NOT <ZERO? .PREP>>
<NOT ,P-END-ON-PREP>>
<PRINTB <SET PREP <PREP-FIND .PREP>>>
<COND (<EQUAL? .PREP ,W?OUT>
<TELL " of">)>
<TELL " ">
<COND (<EQUAL? .OBJ ,HANDS>
<TELL "your hands">)
(T
<TELL "the " D .OBJ>)>
<TELL ")" CR>)
(ELSE
<TELL D .OBJ ")" CR>)>
.OBJ)>)
(T <SETG P-GWIMBIT 0> <RFALSE>)>>
<ROUTINE SNARF-OBJECTS ("AUX" OPTR IPTR L)
<PUT ,P-BUTS ,P-MATCHLEN 0>
<COND (<NOT <EQUAL? <SET IPTR <GET ,P-ITBL ,P-NC2>> 0>>
<SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC2>>
<OR <SNARFEM .IPTR <GET ,P-ITBL ,P-NC2L> ,P-PRSI> <RFALSE>>)>
<COND (<NOT <EQUAL? <SET OPTR <GET ,P-ITBL ,P-NC1>> 0>>
<SETG P-SLOCBITS <GETB ,P-SYNTAX ,P-SLOC1>>
<OR <SNARFEM .OPTR <GET ,P-ITBL ,P-NC1L> ,P-PRSO> <RFALSE>>)>
<COND (<NOT <ZERO? <GET ,P-BUTS ,P-MATCHLEN>>>
<SET L <GET ,P-PRSO ,P-MATCHLEN>>
<COND (.OPTR <SETG P-PRSO <BUT-MERGE ,P-PRSO>>)>
<COND (<AND .IPTR
<OR <NOT .OPTR>
<EQUAL? .L <GET ,P-PRSO ,P-MATCHLEN>>>>
<SETG P-PRSI <BUT-MERGE ,P-PRSI>>)>)>
<RTRUE>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 10-15 (22298)
.NTBL>
<GLOBAL P-NAM <>>
<GLOBAL P-ADJ <>>
<GLOBAL P-ADVERB <>>
<GLOBAL P-ADJN <>>
<GLOBAL P-PRSO <ITABLE NONE 25>>
<GLOBAL P-PRSI <ITABLE NONE 25>>
<GLOBAL P-BUTS <ITABLE NONE 25>>
<GLOBAL P-MERGE <ITABLE NONE 25>>
<GLOBAL P-OCLAUSE <ITABLE NONE 25>>
<GLOBAL P-MATCHLEN 0>
<GLOBAL P-GETFLAGS 0>
<CONSTANT P-ALL 1>
<CONSTANT P-ONE 2>
<CONSTANT P-INHIBIT 4>
<GLOBAL P-CSPTR <>>
<GLOBAL P-CEPTR <>>
<ROUTINE SNARFEM (PTR EPTR TBL "AUX" (BUT <>) LEN WV WRD NW)
<SETG P-GETFLAGS 0>
<SETG P-CSPTR .PTR>
<SETG P-CEPTR .EPTR>
<PUT ,P-BUTS ,P-MATCHLEN 0>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 8-15 (31421)
.NTBL>
<GLOBAL P-NAM <>>
<GLOBAL P-ADJ <>>
<GLOBAL P-ADVERB <>>
<GLOBAL P-ADJN <>>
<GLOBAL P-PRSO <ITABLE NONE 50>>
<GLOBAL P-PRSI <ITABLE NONE 50>>
<GLOBAL P-BUTS <ITABLE NONE 50>>
<GLOBAL P-MERGE <ITABLE NONE 50>>
<GLOBAL P-OCLAUSE <ITABLE NONE 100>>
<GLOBAL P-MATCHLEN 0>
<GLOBAL P-GETFLAGS 0>
<CONSTANT P-ALL 1>
<CONSTANT P-ONE 2>
<CONSTANT P-INHIBIT 4>
<GLOBAL P-AND <>>
<ROUTINE SNARFEM (PTR EPTR TBL "AUX" (BUT <>) LEN WV WRD NW (WAS-ALL <>))
<SETG P-AND <>>
<COND (<EQUAL? ,P-GETFLAGS ,P-ALL>
<SET WAS-ALL T>)>
<SETG P-GETFLAGS 0>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-13 (23035)
<COND (<==? .PTR .EPTR> <RETURN <GET-OBJECT <OR .BUT .TBL>>>)
(T
<SET NW <GET .PTR ,P-LEXELEN>>
<COND (<EQUAL? .WRD ,W?ALL ,W?BOTH>
<SETG P-GETFLAGS ,P-ALL>
<COND (<==? .NW ,W?OF>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-13 (32074)
<COND (<EQUAL? .PTR .EPTR>
<SET WV <GET-OBJECT <OR .BUT .TBL>>>
<COND (.WAS-ALL <SETG P-GETFLAGS ,P-ALL>)>
<RETURN .WV>)
(T
<COND (<==? .EPTR <REST .PTR ,P-WORDLEN>>
<SET NW 0>)
(T <SET NW <GET .PTR ,P-LEXELEN>>)>
<COND (<EQUAL? .WRD ,W?ALL ;,W?BOTH>
<SETG P-GETFLAGS ,P-ALL>
<COND (<EQUAL? .NW ,W?OF>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-27 (23508)
<COND (<==? .NW ,W?OF>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-32 (32693)
<COND (<EQUAL? .NW ,W?OF>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-35 (23793)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-40 (32981)
<SETG P-AND T>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-39 (23915)
(<==? .WRD ,W?OF>
<COND (<0? ,P-GETFLAGS>
<SETG P-GETFLAGS ,P-INHIBIT>)>)
(<AND <SET WV <WT? .WRD ,PS?ADJECTIVE ,P1?ADJECTIVE>>
<ADJ-CHECK .WRD>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-45 (33123)
(<EQUAL? .WRD ,W?OF>
<COND (<ZERO? ,P-GETFLAGS>
<SETG P-GETFLAGS ,P-INHIBIT>)>)
(<AND <SET WV <WT? .WRD ,PS?ADJECTIVE ,P1?ADJECTIVE>>
<NOT ,P-ADJ>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-49 (24227)
<COND (<NOT <==? .PTR .EPTR>>
<SET PTR <REST .PTR ,P-WORDLEN>>
<SET WRD .NW>)>>>
<ROUTINE ADJ-CHECK (WRD)
<COND (<AND ,P-ADJ
<OR <EQUAL? .WRD ,W?ENCHAN ,W?SPELL ,W?CASTLE>
<EQUAL? .WRD ,W?RIVER>>>
<RFALSE>)
(<NOT ,P-ADJ>
<RTRUE>)
(<EQUAL? ,P-ADJ ,A?UPPER ,A?LOWER>
<RFALSE>)
(T
<RTRUE>)>>
<CONSTANT SH 128>
<CONSTANT SC 64>
<CONSTANT SIR 32>
<CONSTANT SOG 16>
<CONSTANT STAKE 8>
<CONSTANT SMANY 4>
<CONSTANT SHAVE 2>
<GLOBAL NOUN-MISSING "There seems to be a noun missing in that sentence.">
<ROUTINE GET-OBJECT (TBL "OPTIONAL" (VRB T)
"AUX" BITS LEN XBITS TLEN (GCHECK <>) (OLEN 0) OBJ)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-55 (33437)
<COND (<NOT <EQUAL? .PTR .EPTR>>
<SET PTR <REST .PTR ,P-WORDLEN>>
<SET WRD .NW>)>>>
<CONSTANT SH 128>
<CONSTANT SC 64>
<CONSTANT SIR 32>
<CONSTANT SOG 16>
<CONSTANT STAKE 8>
<CONSTANT SMANY 4>
<CONSTANT SHAVE 2>
<ROUTINE GET-OBJECT (TBL
"OPTIONAL" (VRB T)
"AUX" BITS LEN XBITS TLEN (GCHECK <>) (OLEN 0) OBJ)
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-86 (25068)
<COND (<AND <NOT ,P-NAM>
,P-ADJ
<NOT <ZERO? <WT? ,P-ADJN ,PS?OBJECT ,P1?OBJECT>>>>
<SETG P-NAM ,P-ADJN>
<SETG P-ADJ <>>)>
<COND (<AND <NOT ,P-NAM>
<NOT ,P-ADJ>
<NOT <==? ,P-GETFLAGS ,P-ALL>>
<0? ,P-GWIMBIT>>
<COND (.VRB
<TELL ,NOUN-MISSING CR>)>
<RFALSE>)>
<COND (<OR <NOT <==? ,P-GETFLAGS ,P-ALL>> <0? ,P-SLOCBITS>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-73 (33902)
<COND (<AND <NOT ,P-NAM> ,P-ADJ>
<COND (<WT? ,P-ADJN ,PS?OBJECT ,P1?OBJECT>
<SETG P-NAM ,P-ADJN>
<SETG P-ADJ <>>)
%<COND (<==? ,ZORK-NUMBER 3>
'(<SET BITS
<WT? ,P-ADJN
,PS?DIRECTION ,P1?DIRECTION>>
<SETG P-ADJ <>>
<PUT .TBL ,P-MATCHLEN 1>
<PUT .TBL 1 ,INTDIR>
<SETG P-DIRECTION .BITS>
<RTRUE>))
(ELSE '(<NULL-F> T))>>)>
<COND (<AND <NOT ,P-NAM>
<NOT ,P-ADJ>
<NOT <EQUAL? ,P-GETFLAGS ,P-ALL>>
<ZERO? ,P-GWIMBIT>>
<COND (.VRB
<TELL
"There seems to be a noun missing in that sentence!" CR>)>
<RFALSE>)>
<COND (<OR <NOT <EQUAL? ,P-GETFLAGS ,P-ALL>> <ZERO? ,P-SLOCBITS>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-104 (25573)
<COND (<OR ,LIT ,BLORTED>
<FCLEAR ,PLAYER ,TRANSBIT>
<DO-SL ,HERE ,SOG ,SIR>
;<COND (<AND <FSET? <LOC ,PLAYER> ,VEHBIT>
<NOT <FSET? <LOC ,PLAYER> ,OPENBIT>>>
<DO-SL <LOC ,PLAYER> ,SOG ,SIR>)>
<FSET ,PLAYER ,TRANSBIT>)>
<DO-SL ,PLAYER ,SH ,SC>
<COND (<EQUAL? <GET .TBL 0> .TLEN>
<COND (<AND ,P-ADJ <EQUAL? ,P-NAM ,W?SPELL <>>>
<SPELL-CHECK .TBL ,P-ADJN>)
(T
<SPELL-CHECK .TBL ,P-NAM>)>)>)>
<SET LEN <- <GET .TBL ,P-MATCHLEN> .TLEN>>
<COND (<BTST ,P-GETFLAGS ,P-ALL> ;<AND * <NOT <EQUAL? .LEN 0>>>)
(<AND <BTST ,P-GETFLAGS ,P-ONE>
<NOT <0? .LEN>>>
<COND (<NOT <==? .LEN 1>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-101 (34729)
<COND (,LIT
<FCLEAR ,PLAYER ,TRANSBIT>
<DO-SL ,HERE ,SOG ,SIR>
<FSET ,PLAYER ,TRANSBIT>)>
<DO-SL ,PLAYER ,SH ,SC>
%<COND (<==? ,ZORK-NUMBER 4>
'<COND (<EQUAL? <GET .TBL 0> .TLEN>
<COND (<AND ,P-ADJ
<EQUAL? ,P-NAM ,W?SPELL <>>>
<SETG P-NAM ,P-ADJN>)>
<SPELL-CHECK .TBL ,P-NAM>)>)
(ELSE <NULL-F>)>)>
<SET LEN <- <GET .TBL ,P-MATCHLEN> .TLEN>>
<COND (<BTST ,P-GETFLAGS ,P-ALL>)
(<AND <BTST ,P-GETFLAGS ,P-ONE>
<NOT <ZERO? .LEN>>>
<COND (<NOT <EQUAL? .LEN 1>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-128 (26562)
<AND <0? .LEN> <NOT <==? ,P-SLOCBITS -1>>>>
<COND (<==? ,P-SLOCBITS -1>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-124 (35540)
<AND <ZERO? .LEN> <NOT <EQUAL? ,P-SLOCBITS -1>>>>
<COND (<EQUAL? ,P-SLOCBITS -1>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-137 (26815)
<COND (<0? .LEN> <SET LEN .OLEN>)>
<COND (<AND ;.VRB ;".VRB added 8/14/84 by JW"
<NOT <==? ,WINNER ,PROTAGONIST>>>
<CANT-ORPHAN>
;<SETG P-NAM <>>
;<SETG P-ADJ <>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-133 (35802)
<COND (<ZERO? .LEN> <SET LEN .OLEN>)>
<COND (<NOT <EQUAL? ,WINNER ,PLAYER>>
<CANT-ORPHAN>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-147 (27140)
<COND (<==? .TBL ,P-PRSO> ,P-NC1)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-140 (36029)
<COND (<EQUAL? .TBL ,P-PRSO> ,P-NC1)
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-154 (27327)
<TELL ,NOUN-MISSING CR>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-147 (36219)
<TELL
"There seems to be a noun missing in that sentence!" CR>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-158 (27434)
<COND (<AND <0? .LEN>
.GCHECK>
<COND (.VRB
;<SETG P-SLOCBITS .XBITS>
<COND (<OR ,LIT
,BLORTED
<VERB? TELL WHERE WHAT WHO FROTZ>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-152 (36366)
<COND (<AND <ZERO? .LEN> .GCHECK>
<COND (.VRB
;"next added 1/2/85 by JW"
<SETG P-SLOCBITS .XBITS>
<COND (<OR ,LIT <VERB? TELL ;WHERE ;WHAT ;WHO>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-174 (27882)
(T
<TOO-DARK>)>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-166 (36821)
(T <TELL "It's too dark to see!" CR>)>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-179 (27986)
(<0? .LEN>
<SET GCHECK T>
<AGAIN>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-170 (36939)
(<ZERO? .LEN> <SET GCHECK T> <AGAIN>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-187 (28153)
<ROUTINE SPELL-CHECK (TBL WRD "AUX" (OBJ <>))
<COND (<EQUAL? .WRD ,W?GNUSTO>
<SET OBJ ,GNUSTO-SPELL>)
(<EQUAL? .WRD ,W?FROTZ>
<SET OBJ ,FROTZ-SPELL>)
(<EQUAL? .WRD ,W?REZROV>
<SET OBJ ,REZROV-SPELL>)
(<EQUAL? .WRD ,W?IZYUK>
<SET OBJ ,IZYUK-SPELL>)
(<EQUAL? .WRD ,W?AIMFIZ>
<SET OBJ ,AIMFIZ-SPELL>)
(<EQUAL? .WRD ,W?FWEEP>
<SET OBJ ,FWEEP-SPELL>)
(<EQUAL? .WRD ,W?SWANZO>
<SET OBJ ,SWANZO-SPELL>)
(<EQUAL? .WRD ,W?GOLMAC>
<SET OBJ ,GOLMAC-SPELL>)
(<EQUAL? .WRD ,W?VARDIK>
<SET OBJ ,VARDIK-SPELL>)
(<EQUAL? .WRD ,W?PULVER>
<SET OBJ ,PULVER-SPELL>)
(<EQUAL? .WRD ,W?MEEF>
<SET OBJ ,MEEF-SPELL>)
(<EQUAL? .WRD ,W?VEZZA>
<SET OBJ ,VEZZA-SPELL>)
(<EQUAL? .WRD ,W?GASPAR>
<SET OBJ ,GASPAR-SPELL>)
(<EQUAL? .WRD ,W?YOMIN>
<SET OBJ ,YOMIN-SPELL>)
(<EQUAL? .WRD ,W?YONK>
<SET OBJ ,YONK-SPELL>)
(<EQUAL? .WRD ,W?MALYON>
<SET OBJ ,MALYON-SPELL>)>
<COND (.OBJ
<OBJ-FOUND .OBJ .TBL>)>
<RTRUE>>
<ROUTINE MOBY-FIND (TBL "AUX" FOO LEN)
<SETG P-MOBY-FLAG T>
<SETG P-SLOCBITS -1>
<SETG P-TABLE .TBL>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-176 (37091)
<COND (<==? ,ZORK-NUMBER 4>
<ROUTINE MOBY-FIND (TBL "AUX" FOO LEN)
<SETG P-SLOCBITS -1>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-237 (29574)
<DO-SL ,LOCAL-GLOBALS 1 1>
<SEARCH-LIST ,ROOMS .TBL ,P-SRCTOP>
<COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 1>
<SETG P-MOBY-FOUND <GET .TBL 1>>)>
<SETG P-MOBY-FLAG <>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-188 (37416)
<COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 0>
<DO-SL ,LOCAL-GLOBALS 1 1>)>
<COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 0>
<DO-SL ,ROOMS 1 1>)>
<COND (<EQUAL? <SET LEN <GET .TBL ,P-MATCHLEN>> 1>
<SETG P-MOBY-FOUND <GET .TBL 1>>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-246 (29809)
<GLOBAL P-MOBY-FOUND <>>
<GLOBAL P-MOBY-FLAG <>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-198 (37721)
<GLOBAL P-MOBY-FOUND <>>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-254 (29997)
<TELL "Which">
<COND (<OR ,P-OFLAG ,P-MERGED> <TELL " "> <PRINTB ,P-NAM>)
(<==? .TBL ,P-PRSO>
<CLAUSE-PRINT ,P-NC1 ,P-NC1L <>>)
(T <CLAUSE-PRINT ,P-NC2 ,P-NC2L <>>)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-206 (37885)
<TELL "Which ">
<COND (<OR ,P-OFLAG ,P-MERGED ,P-AND>
<PRINTB <COND (,P-NAM ,P-NAM)
(,P-ADJ ,P-ADJN)
(ELSE ,W?ONE)>>)
(ELSE
<THING-PRINT <EQUAL? .TBL ,P-PRSO>>)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 11-264 (30321)
<COND (<==? .LEN 2>
<COND (<NOT <==? .RLEN 2>> <TELL ",">)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 9-218 (38219)
<COND (<EQUAL? .LEN 2>
<COND (<NOT <EQUAL? .RLEN 2>> <TELL ",">)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-2 (30550)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-2 (38456)
<GLOBAL LAST-PSEUDO-LOC <>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-15 (31058)
<COND (<==? ,P-NAM <GET .RMG <* .CNT 2>>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-17 (38995)
<COND (<EQUAL? ,P-NAM <GET .RMG <* .CNT 2>>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-27 (31495)
<COND (<==? <GET .TBL ,P-MATCHLEN> .LEN>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-29 (39435)
<COND (<EQUAL? <GET .TBL ,P-MATCHLEN> .LEN>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-32 (31668)
;<COND (<AND <0? <GET .TBL ,P-MATCHLEN>>
<EQUAL? ,PRSA ,V?LOOK-INSIDE ,V?SEARCH ,V?EXAMINE>>
<DO-SL ,ROOMS 1 1>)>)>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-34 (39611)
<COND (<AND <ZERO? <GET .TBL ,P-MATCHLEN>>
<EQUAL? ,PRSA ,V?LOOK-INSIDE ,V?SEARCH ,V?EXAMINE>>
<DO-SL ,ROOMS 1 1>)>)>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-44 (32129)
(T <RTRUE>)>)>>
<CONSTANT P-SRCBOT 2>
<CONSTANT P-SRCTOP 0>
<CONSTANT P-SRCALL 1>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-46 (40073)
(T <RTRUE>)>)>>
<CONSTANT P-SRCBOT 2>
<CONSTANT P-SRCTOP 0>
<CONSTANT P-SRCALL 1>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-55 (32352)
<COND (<AND <NOT <==? .LVL ,P-SRCBOT>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-55 (40274)
<COND (<AND <NOT <EQUAL? .LVL ,P-SRCBOT>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-59 (32497)
<COND (<AND <OR <NOT <==? .LVL ,P-SRCTOP>>
<FSET? .OBJ ,SEARCHBIT>
<FSET? .OBJ ,SURFACEBIT>>
<SET NOBJ <FIRST? .OBJ>>>
<COND (<OR <FSET? .OBJ ,OPENBIT>
<FSET? .OBJ ,TRANSBIT>
,P-MOBY-FLAG>
<SET FLS
<SEARCH-LIST
.OBJ
.TBL
<COND (<FSET? .OBJ ,SURFACEBIT>
,P-SRCALL)
(<FSET? .OBJ ,SEARCHBIT>
,P-SRCALL)
(T ,P-SRCTOP)>>>)>)>
<COND (<SET OBJ <NEXT? .OBJ>>) (T <RETURN>)>>)>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-59 (40422)
<COND (<AND <OR <NOT <EQUAL? .LVL ,P-SRCTOP>>
<FSET? .OBJ ,SEARCHBIT>
<FSET? .OBJ ,SURFACEBIT>>
<SET NOBJ <FIRST? .OBJ>>
<OR <FSET? .OBJ ,OPENBIT>
<FSET? .OBJ ,TRANSBIT>>>
<SET FLS
<SEARCH-LIST .OBJ
.TBL
<COND (<FSET? .OBJ ,SURFACEBIT>
,P-SRCALL)
(<FSET? .OBJ ,SEARCHBIT>
,P-SRCALL)
(T ,P-SRCTOP)>>>)>
<COND (<SET OBJ <NEXT? .OBJ>>) (T <RETURN>)>>)>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-82 (33169)
<ROUTINE TAKE-CHECK ()
<AND <ITAKE-CHECK ,P-PRSO <GETB ,P-SYNTAX ,P-SLOC1>>
<ITAKE-CHECK ,P-PRSI <GETB ,P-SYNTAX ,P-SLOC2>>>>
<ROUTINE ITAKE-CHECK (TBL IBITS "AUX" PTR OBJ TAKEN) ;"changed, MARC, 11/17/83"
<COND (<AND <SET PTR <GET .TBL ,P-MATCHLEN>>
<OR <BTST .IBITS ,SHAVE>
<BTST .IBITS ,STAKE>>>
<REPEAT ()
<COND (<L? <SET PTR <- .PTR 1>> 0>
<RETURN>)
(T
<SET OBJ <GET .TBL <+ .PTR 1>>>
<COND (<EQUAL? .OBJ ,IT>
<COND (<NOT <ACCESSIBLE? ,P-IT-OBJECT>>
<REFERRING>
<RFALSE>)
(T
<SET OBJ ,P-IT-OBJECT>)>)>
<COND (<EQUAL? .OBJ ,HANDS>
T)
(<AND <VERB? TAKE-OFF>
<EQUAL? .OBJ <LOC ,PROTAGONIST>>>
T)
(<NOT <EQUAL? ,WINNER ,PROTAGONIST>>
T)
(<NOT <HELD? .OBJ>>
<SETG PRSO .OBJ>
<COND (<FSET? .OBJ ,TRYTAKEBIT>
<SET TAKEN T>)
(<NOT <EQUAL? ,WINNER ,PROTAGONIST>>
<SET TAKEN <>>)
(<AND <BTST .IBITS ,STAKE>
<EQUAL? <ITAKE <>> T>>
<SET TAKEN <>>)
(T
<SET TAKEN T>)>
<COND (<AND .TAKEN <BTST .IBITS ,SHAVE>>
<TELL ,YNH>
<COND (<L? 1 <GET .TBL ,P-MATCHLEN>>
<TELL "all those things">)
(<EQUAL? .OBJ ,NOT-HERE-OBJECT>
<TELL " that">)
(T
<ARTICLE .OBJ T>
<THIS-IS-IT .OBJ>)>
<TELL "!" CR>
<RFALSE>)
(<AND <NOT .TAKEN>
<EQUAL? ,WINNER ,PROTAGONIST>>
<TELL "(taking">
<ARTICLE .OBJ T>
<TELL " first)" CR>)>)>)>>)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 10-80 (41076)
<ROUTINE TAKE-CHECK ()
<AND <ITAKE-CHECK ,P-PRSO <GETB ,P-SYNTAX ,P-SLOC1>>
<ITAKE-CHECK ,P-PRSI <GETB ,P-SYNTAX ,P-SLOC2>>>>
<ROUTINE ITAKE-CHECK (TBL IBITS "AUX" PTR OBJ TAKEN)
#DECL ((TBL) TABLE (IBITS PTR) FIX (OBJ) OBJECT
(TAKEN) <OR FALSE FIX ATOM>)
<COND (<AND <SET PTR <GET .TBL ,P-MATCHLEN>>
<OR <BTST .IBITS ,SHAVE>
<BTST .IBITS ,STAKE>>>
<REPEAT ()
<COND (<L? <SET PTR <- .PTR 1>> 0> <RETURN>)
(T
<SET OBJ <GET .TBL <+ .PTR 1>>>
<COND (<EQUAL? .OBJ ,IT>
<COND (<NOT <ACCESSIBLE? ,P-IT-OBJECT>>
<TELL
"I don't see what you're referring to." CR>
<RFALSE>)
(T
<SET OBJ ,P-IT-OBJECT>)>)>
<COND (<AND <NOT <HELD? .OBJ>>
<NOT <EQUAL? .OBJ ,HANDS ,ME>>>
<SETG PRSO .OBJ>
<COND (<FSET? .OBJ ,TRYTAKEBIT>
<SET TAKEN T>)
(<NOT <EQUAL? ,WINNER ,ADVENTURER>>
<SET TAKEN <>>)
(<AND <BTST .IBITS ,STAKE>
<EQUAL? <ITAKE <>> T>>
<SET TAKEN <>>)
(T <SET TAKEN T>)>
<COND (<AND .TAKEN
<BTST .IBITS ,SHAVE>
<EQUAL? ,WINNER
,ADVENTURER>>
<COND (<EQUAL? .OBJ
,NOT-HERE-OBJECT>
<TELL
"You don't have that!" CR>
<RFALSE>)>
<TELL "You don't have the ">
<PRINTD .OBJ>
<TELL "." CR>
<RFALSE>)
(<AND <NOT .TAKEN>
<EQUAL? ,WINNER ,ADVENTURER>>
<TELL "(Taken)" CR>)>)>)>>)
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-145 (35104)
<TELL "I can't use multiple ">
<COND (<==? .LOSS 2> <TELL "in">)>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 11-56 (42958)
<TELL "You can't use multiple ">
<COND (<EQUAL? .LOSS 2> <TELL "in">)>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-156 (35487)
(T)>>
<ROUTINE ZMEMQ (ITM TBL "OPTIONAL" (SIZE -1) "AUX" (CNT 1))
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 11-67 (43346)
(T)>>
<ROUTINE ZMEMQ (ITM TBL "OPTIONAL" (SIZE -1) "AUX" (CNT 1))
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 12-163 (35693)
<COND (<==? .ITM <GET .TBL .CNT>> <RTRUE>)
(<IGRTR? CNT .SIZE> <RFALSE>)>>>
<ROUTINE ZMEMQB (ITM TBL SIZE "AUX" (CNT 0))
<REPEAT ()
<COND (<==? .ITM <GETB .TBL .CNT>> <RTRUE>)
(<IGRTR? CNT .SIZE> <RFALSE>)>>>
<GLOBAL ALWAYS-LIT <>>
<ROUTINE LIT? (RM "OPTIONAL" (RMBIT T) "AUX" OHERE (LIT <>))
<COND (<AND ,ALWAYS-LIT <EQUAL? ,WINNER ,PROTAGONIST>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 11-74 (43548)
<COND (<EQUAL? .ITM <GET .TBL .CNT>>
<RETURN <REST .TBL <* .CNT 2>>>)
(<IGRTR? CNT .SIZE> <RFALSE>)>>>
<ROUTINE ZMEMQB (ITM TBL SIZE "AUX" (CNT 0))
<REPEAT ()
<COND (<EQUAL? .ITM <GETB .TBL .CNT>>
<RTRUE>)
(<IGRTR? CNT .SIZE>
<RFALSE>)>>>
<GLOBAL ALWAYS-LIT <>>
<ROUTINE LIT? (RM "OPTIONAL" (RMBIT T) "AUX" OHERE (LIT <>))
<COND (<AND ,ALWAYS-LIT <EQUAL? ,WINNER ,PLAYER>>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 13-18 (36239)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 12-20 (44142)
%<COND (<==? ,ZORK-NUMBER 4>
'(<AND .RMBIT
<NOT <G? ,TOD ,NIGHTFALL>>
<FSET? .RM ,LIGHTBIT>>
<SET LIT T>))
(ELSE '(<NULL-F> <RTRUE>))>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 13-22 (36351)
<COND (<==? .OHERE .RM>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 12-30 (44436)
<COND (<EQUAL? .OHERE .RM>
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 13-33 (36667)
;<ROUTINE PRSO-PRINT ("AUX" PTR)
<COND (<OR ,P-MERGED
<==? <GET <SET PTR <GET ,P-ITBL ,P-NC1>> 0> ,W?IT>>
<TELL " " D ,PRSO>)
(T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC1L> <>>)>>
;<ROUTINE PRSI-PRINT ("AUX" PTR)
<COND (<OR ,P-MERGED
<==? <GET <SET PTR <GET ,P-ITBL ,P-NC2>> 0> ,W?IT>>
<TELL " " D ,PRSO>)
(T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC2L> <>>)>>
;"former CRUFTY.ZIL routine"
<ROUTINE THIS-IT? (OBJ TBL "AUX" SYNS)
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 12-41 (44755)
<COND (<==? ,ZORK-NUMBER 4>
<ROUTINE PRSO-PRINT ("AUX" PTR)
<COND (<OR ,P-MERGED
<EQUAL? <GET <SET PTR <GET ,P-ITBL ,P-NC1>> 0> ,W?IT>>
<TELL " " D ,PRSO>)
(T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC1L> <>>)>>
<ROUTINE PRSI-PRINT ("AUX" PTR)
<COND (<OR ,P-MERGED
<EQUAL? <GET <SET PTR <GET ,P-ITBL ,P-NC2>> 0> ,W?IT>>
<TELL " " D ,PRSO>)
(T <BUFFER-PRINT .PTR <GET ,P-ITBL ,P-NC2L> <>>)>>
)>
;"former CRUFTY routine, re-written by SWG"
<ROUTINE THIS-IT? (OBJ TBL "AUX" SYNS)
***************
**** FILE SS:<SORCERER>PARSER.ZIL.160, 13-58 (37463)
(<AND <NOT <0? ,P-GWIMBIT>> <NOT <FSET? .OBJ ,P-GWIMBIT>>>
<RFALSE>)>
<RTRUE>>
**** FILE SS:<ENCHANTER>GPARSER.ZIL.9, 12-69 (45604)
(<AND <NOT <ZERO? ,P-GWIMBIT>> <NOT <FSET? .OBJ ,P-GWIMBIT>>>
<RFALSE>)>
<RTRUE>>
<ROUTINE ACCESSIBLE? (OBJ "AUX" (L <LOC .OBJ>)) ;"can player TOUCH object?"
;"revised 5/2/84 by SEM and SWG"
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
;(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<COND (<EQUAL? ,LAST-PSEUDO-LOC ,HERE>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT .L>
<RFALSE>)
(<EQUAL? .L ,GLOBAL-OBJECTS>
<RTRUE>)
(<AND <EQUAL? .L ,LOCAL-GLOBALS>
<GLOBAL-IN? .OBJ ,HERE>>
<RTRUE>)
(<NOT <EQUAL? <META-LOC .OBJ> ,HERE <LOC ,WINNER>>>
<RFALSE>)
(<EQUAL? .L ,WINNER ,HERE <LOC ,WINNER>>
<RTRUE>)
(<AND <FSET? .L ,OPENBIT>
<ACCESSIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE META-LOC (OBJ)
<REPEAT ()
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ ,GLOBAL-OBJECTS>
<RETURN ,GLOBAL-OBJECTS>)>
<COND (<IN? .OBJ ,ROOMS>
<RETURN .OBJ>)
(T
<SET OBJ <LOC .OBJ>>)>>>
***************