mirror of
https://github.com/historicalsource/zorkzero
synced 2024-04-29 15:49:28 +03:00
297 lines
8.3 KiB
Plaintext
297 lines
8.3 KiB
Plaintext
|
"PDEFS file for NEW PARSER
|
|||
|
Copyright (C) 1988 Infocom, Inc. All rights reserved."
|
|||
|
|
|||
|
<ZZSECTION "PDEFS">
|
|||
|
|
|||
|
<USE "NEWSTRUC" "PMEM">
|
|||
|
|
|||
|
<INCLUDE "BASEDEFS">
|
|||
|
|
|||
|
<FILE-FLAGS MDL-ZIL? ZAP-TO-SOURCE-DIRECTORY?>
|
|||
|
|
|||
|
"Defaults for ZIL-type DEFSTRUCTs"
|
|||
|
<SET-DEFSTRUCT-FILE-DEFAULTS ('START-OFFSET 0) ('NTH ZGET) ('PUT ZPUT)
|
|||
|
'NODECL>
|
|||
|
|
|||
|
<BLOCK (<ROOT>)>
|
|||
|
ZMEMQ
|
|||
|
ZMEMQB
|
|||
|
<ENDBLOCK>
|
|||
|
|
|||
|
<COND (<OR <CHECK-VERSION? XZIP>
|
|||
|
<CHECK-VERSION? YZIP>>
|
|||
|
<DEFMAC ZMEMQB ('OBJ 'TBL 'LEN)
|
|||
|
<FORM INTBL? .OBJ .TBL .LEN 1>>)
|
|||
|
(T
|
|||
|
<ROUTINE ZMEMQB ZM (OBJ:ANY TBL:TABLE LEN:FIX)
|
|||
|
<REPEAT ((N 0))
|
|||
|
<COND (<==? <GETB .TBL .N> .OBJ>
|
|||
|
<RETURN <ZREST .TBL .N> .ZM>)>
|
|||
|
<COND (<G=? <SET N <+ .N 1>> .LEN>
|
|||
|
<RETURN <> .ZM>)>>>)>
|
|||
|
|
|||
|
<COND (<CHECK-VERSION? ZIP>
|
|||
|
<ROUTINE ZMEMQ (OBJ:ANY TBL:TABLE LEN:FIX)
|
|||
|
<REPEAT ((N 0))
|
|||
|
<COND (<==? <ZGET .TBL .N> .OBJ>
|
|||
|
<RETURN <ZREST .TBL <* .N 2>>>)>
|
|||
|
<COND (<G=? <SET N <+ .N 1>> .LEN>
|
|||
|
<RETURN <>>)>>>)
|
|||
|
(T
|
|||
|
<DEFMAC ZMEMQ ('OBJ 'TBL 'LEN)
|
|||
|
<FORM INTBL? .OBJ .TBL .LEN>>)>
|
|||
|
|
|||
|
<SETG20 PDEFS-INTERNAL-OBLIST .OBLIST>
|
|||
|
|
|||
|
;<MSETG PARSER-ERROR-ARG-PMEM 1>
|
|||
|
;<MSETG PARSER-ERROR-ARG-VWORD 2>
|
|||
|
<MSETG PARSER-ERROR-TMNOUN 247>
|
|||
|
<MSETG PARSER-ERROR-NOOBJ 248>
|
|||
|
;<MSETG PARSER-ERROR-NOOBJ2 249>
|
|||
|
<MSETG PARSER-ERROR-ORPH-NP 250>
|
|||
|
<MSETG PARSER-ERROR-ORPH-S 251>
|
|||
|
<MSETG PARSER-ERROR-NOMULT 252>
|
|||
|
<MSETG PARSER-ERROR-NOUND 253>
|
|||
|
;<MSETG PARSER-ERROR-QUIET 254>
|
|||
|
|
|||
|
<MSETG PARSER-RESULT-DEAD 0>
|
|||
|
<MSETG PARSER-RESULT-FAILED 1>
|
|||
|
<MSETG PARSER-RESULT-WON 2>
|
|||
|
<MSETG PARSER-RESULT-AGAIN 3>
|
|||
|
|
|||
|
<MSETG FD-INCLUDE? 1>
|
|||
|
<MSETG FD-SEARCH? 2>
|
|||
|
<MSETG FD-NEST? 4>
|
|||
|
<MSETG FD-NOTOP? 8>
|
|||
|
|
|||
|
"Definitions for various PMEMs"
|
|||
|
<MSETG ADJS-MAX-COUNT 4>
|
|||
|
<PM-TYPE ADJS ;1 <+ 4 ,ADJS-MAX-COUNT>
|
|||
|
(LEXPTR FIX)
|
|||
|
(POSS ANY ;<OR FALSE OBJECT PMEM ;"noun">)
|
|||
|
(QUANT <OR FALSE FIX>)
|
|||
|
(COUNT FIX 0)>
|
|||
|
<CONSTANT ORPHAN-ADJS <ITABLE <+ 1 <+ 4 ,ADJS-MAX-COUNT>> 0>>
|
|||
|
|
|||
|
<MSETG NP-LENGTH 9>
|
|||
|
<PM-TYPE NP ;2 ,NP-LENGTH
|
|||
|
(ADJS <OR FALSE PMEM>)
|
|||
|
(NAME <OR FALSE VWORD>)
|
|||
|
(QUANT <OR FALSE FIX>)
|
|||
|
(OF <OR FALSE PMEM>)
|
|||
|
(LOC <OR FALSE PMEM>)
|
|||
|
(EXCEPT <OR FALSE PMEM>)
|
|||
|
(LEXBEG <OR FALSE FIX>)
|
|||
|
(LEXEND <OR FALSE FIX>)>
|
|||
|
<CONSTANT ORPHAN-NP <ITABLE <+ 1 ,NP-LENGTH> 0>>
|
|||
|
<CONSTANT ORPHAN-NP2 <ITABLE <+ 1 ,NP-LENGTH> 0>>
|
|||
|
|
|||
|
<PM-TYPE NPP ;3 3
|
|||
|
(NEXT <OR FALSE PMEM ;NPP>)
|
|||
|
(NOUN <OR FALSE PMEM ;NP>)
|
|||
|
(NOUN-PHRASE <OR FALSE PMEM>)>
|
|||
|
<PM-TYPE NOUN-PHRASE ;4 <>
|
|||
|
(COUNT FIX 0)
|
|||
|
(FLAGS FIX 0)
|
|||
|
(OBJ1 <OR FALSE FIX ;OBJECT>)
|
|||
|
(NP1 <OR FALSE PMEM ;NP>)>
|
|||
|
|
|||
|
<MSETG NP-FLAG-MULTI 1>
|
|||
|
;<DEFMAC NP-MULTI? ('NOUN-PHRASE)
|
|||
|
<FORM NOT <FORM 0? <FORM ANDB <FORM NOUN-PHRASE-FLAGS .NOUN-PHRASE>
|
|||
|
,NP-FLAG-MULTI>>>>
|
|||
|
<MSETG NOUN-PHRASE-ENTLENB 4>
|
|||
|
<MSETG NOUN-PHRASE-ENTLEN 2>
|
|||
|
<MSETG NOUN-PHRASE-HEADER-LEN 3>
|
|||
|
<MSETG NOUN-PHRASE-MIN-LENGTH 4>
|
|||
|
|
|||
|
<PM-TYPE PP ;5 2
|
|||
|
(PREP VWORD NONE)
|
|||
|
(NOUN PMEM ;<OR NP NPP> NONE)>
|
|||
|
<PM-TYPE LOCATION ;6 2
|
|||
|
(PREP VWORD NONE)
|
|||
|
(OBJECT PMEM NONE)>
|
|||
|
<PM-TYPE OBJLIST ;7 <>
|
|||
|
(SIZE FIX)
|
|||
|
;(COUNT <OR FALSE FIX>)
|
|||
|
(NEXT <OR FALSE PMEM>)
|
|||
|
(OWNER ANY) ;"for compatibility with FIND-RES"
|
|||
|
(OBJ1 ANY)>
|
|||
|
|
|||
|
"NP-QUANT slot"
|
|||
|
<MSETG NP-QUANT-NONE <>>
|
|||
|
<MSETG NP-QUANT-A 1>
|
|||
|
;<MSETG NP-QUANT-SOME 2>
|
|||
|
<MSETG NP-QUANT-ALL 3>
|
|||
|
<MSETG NP-QUANT-BOTH 4>
|
|||
|
<MSETG NP-QUANT-NOTHING 5>
|
|||
|
<MSETG NP-QUANT-PLURAL 6>
|
|||
|
|
|||
|
<ADD-WORD ALL QUANT>
|
|||
|
<ADD-WORD A QUANT>
|
|||
|
<ADD-WORD AN QUANT>
|
|||
|
<ADD-WORD ANY QUANT>
|
|||
|
<ADD-WORD EITHER QUANT>
|
|||
|
;<ADD-WORD SOME QUANT> "It's a can of some worms."
|
|||
|
|
|||
|
<CONSTANT NP-QUANT-TBL-LEN 6>
|
|||
|
<CONSTANT NP-QUANT-TBL
|
|||
|
<PTABLE NP-QUANT-ALL <VOC "ALL">
|
|||
|
NP-QUANT-BOTH <VOC "BOTH">
|
|||
|
NP-QUANT-A <VOC "ONE">
|
|||
|
NP-QUANT-A <VOC "EITHER">
|
|||
|
NP-QUANT-A <VOC "ANY">
|
|||
|
;NP-QUANT-SOME ;<VOC "SOME">
|
|||
|
;NP-QUANT-NOTHING ;<VOC "NONE">>>
|
|||
|
|
|||
|
<GDECL (VALID-VERB-CLASSES VALID-QUESTION-CLASSES) <VECTOR [REST FIX]>>
|
|||
|
|
|||
|
ADJ-CLASS
|
|||
|
NOUN-CLASS
|
|||
|
|
|||
|
<MSETG FIRST-PERSON 8>
|
|||
|
<MSETG PLURAL-FLAG 16>
|
|||
|
<MSETG SECOND-PERSON 32>
|
|||
|
<MSETG THIRD-PERSON 64>
|
|||
|
<MSETG PRESENT-TENSE 256>
|
|||
|
<MSETG PAST-TENSE 512>
|
|||
|
<MSETG FUTURE-TENSE 1024>
|
|||
|
<MSETG POSSESSIVE 16384>
|
|||
|
;"<MSETG PERSON-PNF 4096>
|
|||
|
<MSETG THING-PNF 8192>
|
|||
|
<MSETG DONT-ORPHAN 32768>
|
|||
|
<MSETG DEFAULT-OBJECT 65536>"
|
|||
|
|
|||
|
<COND (<OR <CHECK-VERSION? XZIP>
|
|||
|
<CHECK-VERSION? YZIP>>
|
|||
|
<DEFMAC ZSUBSTRUC ('OT 'CT 'NT)
|
|||
|
<FORM COPYT .OT .NT <FORM * .CT 2>>>)
|
|||
|
(T
|
|||
|
<ROUTINE ZSUBSTRUC (OT:<PRIMTYPE TABLE> CT:FIX NT:<PRIMTYPE TABLE>)
|
|||
|
<REPEAT ()
|
|||
|
<COND (<L? <SET CT <- .CT 1>> 0> <RETURN>)>
|
|||
|
<ZPUT .NT .CT <ZGET .OT .CT>>>
|
|||
|
.NT>)>
|
|||
|
|
|||
|
<DEFSTRUCT PARSE-RESULT
|
|||
|
(TABLE
|
|||
|
('PRINTTYPE TABLE-PRINT))
|
|||
|
;0 (PARSE-ADV <OR FALSE VWORD>)
|
|||
|
(PARSE-VERB <OR FALSE VWORD>)
|
|||
|
(PARSE-VERB-LEXV <OR FALSE TABLE>)
|
|||
|
;6 (PARSE-SYNTAX <OR FALSE VERB-SYNTAX>)
|
|||
|
(PARSE-ACTION <OR FALSE FIX>)
|
|||
|
(PARSE-OBJ1 <OR FALSE PMEM ;NOUN-PHRASE>)
|
|||
|
;12(PARSE-OBJ2 <OR FALSE PMEM>)
|
|||
|
(PARSE-PARTICLE1 <OR FALSE VWORD>)
|
|||
|
(PARSE-PARTICLE2 <OR FALSE VWORD>)
|
|||
|
;18(PARSE-LOC <OR FALSE PMEM ;PP>)
|
|||
|
(PARSE-QW <OR FALSE VWORD>)
|
|||
|
(PARSE-ADJ <OR FALSE VWORD>)
|
|||
|
;24(PARSE-CHOMPER <OR FALSE PMEM ;NOUN-PHRASE ;OBJECT>)
|
|||
|
(PARSE-SUBJ <OR FALSE PMEM>)
|
|||
|
(PARSE-QUERY <OR FALSE VWORD>)
|
|||
|
;30(PARSE-QUERY-SYNTAX <OR FALSE VERB-SYNTAX>)
|
|||
|
(PARSE-FLAGS FIX)>
|
|||
|
|
|||
|
<MSETG PARSE-NOT 1>
|
|||
|
<MSETG PARSE-QUESTION 2>
|
|||
|
|
|||
|
<CONSTANT ORPHAN-S <ITABLE 7 0>>
|
|||
|
<CONSTANT O-VERB 0 ;<OR FALSE VWORD>>
|
|||
|
<CONSTANT O-LEXPTR 1 ;<OR FALSE TABLE>>
|
|||
|
<CONSTANT O-SYNTAX 2 ;<OR FALSE VERB-SYNTAX>>
|
|||
|
<CONSTANT O-WHICH 3 ;<OR FALSE FIX>>
|
|||
|
<CONSTANT O-PART 4 ;<OR FALSE VWORD>>
|
|||
|
<CONSTANT O-OBJECT 5 ;<OR FALSE OBJECT>>
|
|||
|
<CONSTANT O-SUBJECT 6 ;<OR FALSE OBJECT>>
|
|||
|
|
|||
|
"Objects are inserted (starting at find-res-obj1 until the vector is full;
|
|||
|
then additional objects go into an objlist allocated from pmem;
|
|||
|
the TOTAL count goes in find-res-count..."
|
|||
|
|
|||
|
<DEFSTRUCT FIND-RES
|
|||
|
(TABLE 'NOTYPE)
|
|||
|
;(FIND-RES-HEADER FIX 'NONE)
|
|||
|
(FIND-RES-SIZE FIX 'NONE) ;( 'NTH GETB 'PUT PUTB 'OFFSET 0)
|
|||
|
(FIND-RES-COUNT FIX 0) ;( 'NTH GETB 'PUT PUTB 'OFFSET 1)
|
|||
|
(FIND-RES-NEXT <OR PMEM FALSE>)
|
|||
|
(FIND-RES-OWNER ANY <>) ;"owner found for body part"
|
|||
|
(FIND-RES-OBJ1 ANY <>)
|
|||
|
;(FIND-RES-OBJ2 ANY <>)>
|
|||
|
|
|||
|
<MSETG FIND-RES-LENGTH 10 ;13>
|
|||
|
<MSETG FIND-RES-MAXOBJ 6 ;7>
|
|||
|
|
|||
|
<CONSTANT SEARCH-RES
|
|||
|
<MAKE-FIND-RES 'FIND-RES <ITABLE ,FIND-RES-LENGTH 0>
|
|||
|
'FIND-RES-SIZE ,FIND-RES-MAXOBJ
|
|||
|
'FIND-RES-COUNT 0>>
|
|||
|
|
|||
|
<CONSTANT ORPHAN-SR
|
|||
|
<MAKE-FIND-RES 'FIND-RES <ITABLE ,FIND-RES-LENGTH 0>
|
|||
|
'FIND-RES-SIZE ,FIND-RES-MAXOBJ
|
|||
|
'FIND-RES-COUNT 0>>
|
|||
|
|
|||
|
<CONSTANT OWNER-SR-HERE
|
|||
|
<MAKE-FIND-RES 'FIND-RES <ITABLE ,FIND-RES-LENGTH 0>
|
|||
|
'FIND-RES-SIZE ,FIND-RES-MAXOBJ
|
|||
|
'FIND-RES-COUNT 0>>
|
|||
|
|
|||
|
<CONSTANT OWNER-SR-THERE
|
|||
|
<MAKE-FIND-RES 'FIND-RES <ITABLE ,FIND-RES-LENGTH 0>
|
|||
|
'FIND-RES-SIZE ,FIND-RES-MAXOBJ
|
|||
|
'FIND-RES-COUNT 0>>
|
|||
|
|
|||
|
<DEFSTRUCT FINDER
|
|||
|
TABLE
|
|||
|
;0 (FIND-APPLIC <OR TABLE FIX> 0) ;"Thing to call to check object"
|
|||
|
(FIND-FLAGS FIX) ;"Gwimming, search globals, etc."
|
|||
|
(FIND-QUANT <OR FIX FALSE>) ;"All, one, etc."
|
|||
|
;6 (FIND-SYNTAX <OR FALSE VERB-SYNTAX>)
|
|||
|
(FIND-WHICH FIX) ;"Which argument of the verb we're getting"
|
|||
|
(FIND-ADJS <OR PMEM FALSE>)
|
|||
|
;12(FIND-NOUN <OR VWORD FALSE>)
|
|||
|
(FIND-OF <OR FALSE PMEM>)
|
|||
|
(FIND-EXCEPTIONS <OR PMEM FALSE>)
|
|||
|
;18(FIND-RES <OR FIND-RES FALSE>)
|
|||
|
;"Where to put result, whatever it is."
|
|||
|
(FIND-NUM FIX)>
|
|||
|
|
|||
|
;"<DEFMAC WT? ('PTR 'BIT 'OPT' 'B1)
|
|||
|
<COND (<AND <TYPE? .BIT GVAL>
|
|||
|
<=? <MEMBER 'PS?' <SPNAME <CHTYPE .BIT ATOM>>>
|
|||
|
<SPNAME <CHTYPE .BIT ATOM>>>>
|
|||
|
<SET BIT <REST <SPNAME <CHTYPE .BIT ATOM>> 3>>)>
|
|||
|
<SET BIT <GET-CLASSIFICATION .BIT>>
|
|||
|
<COND (<OR <NOT <ASSIGNED? B1>>
|
|||
|
<COMPARE-WORD-TYPES .BIT <GET-CLASSIFICATION NOUN>>>
|
|||
|
<FORM COMPARE-WORD-TYPES <FORM WORD-CLASSIFICATION-NUMBER .PTR>
|
|||
|
.BIT>)
|
|||
|
(T
|
|||
|
<COND (<COMPARE-WORD-TYPES .BIT <GET-CLASSIFICATION ADJ>>
|
|||
|
<COND (T ;<CHECK-EXTENDED?>
|
|||
|
<FORM COMPARE-WORD-TYPES .BIT
|
|||
|
<FORM WORD-CLASSIFICATION-NUMBER .PTR>>)
|
|||
|
;(T
|
|||
|
<FORM COND (<FORM COMPARE-WORD-TYPES .BIT
|
|||
|
<FORM WORD-CLASSIFICATION-NUMBER
|
|||
|
.PTR>>
|
|||
|
<FORM WORD-ADJ-ID .PTR>)>)>)
|
|||
|
(<COMPARE-WORD-TYPES .BIT <GET-CLASSIFICATION VERB>>
|
|||
|
<FORM COND (<FORM COMPARE-WORD-TYPES .BIT
|
|||
|
<FORM WORD-CLASSIFICATION-NUMBER .PTR>>
|
|||
|
<FORM WORD-VERB-STUFF .PTR>)>)
|
|||
|
(<COMPARE-WORD-TYPES .BIT <GET-CLASSIFICATION DIR>>
|
|||
|
<FORM COND (<FORM COMPARE-WORD-TYPES .BIT
|
|||
|
<FORM WORD-CLASSIFICATION-NUMBER .PTR>>
|
|||
|
<FORM WORD-DIR-ID .PTR>)>)
|
|||
|
(T
|
|||
|
<FORM COMPARE-WORD-TYPES .BIT
|
|||
|
<FORM WORD-CLASSIFICATION-NUMBER .PTR>>)>)>>"
|
|||
|
|
|||
|
<DEFMAC OBJECT? ('N)
|
|||
|
<FORM AND <FORM L? 0 .N> <FORM L=? .N ',LAST-OBJECT>>>
|
|||
|
|
|||
|
<END-DEFINITIONS>
|