zorkzero/pdefs.zil

297 lines
8.3 KiB
Plaintext
Raw Permalink Normal View History

2019-04-16 16:52:54 +03:00
"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>