zork/syntax.mud

89 lines
2.8 KiB
Plaintext
Raw Normal View History

2019-04-13 16:44:59 -07:00
<DEFINE SYNTAX-CREATE (ARGL "AUX" (PREP <>) (PRSO ,EVARG) (PRSI ,EVARG))
#DECL ((ARGL) LIST (PREP) <OR FALSE PREP> (PRSO PRSI) VARG)
<MAPF <>
<FUNCTION (ITEM "AUX" OPER)
#DECL ((ITEM OPER) ANY)
<COND (<AND <TYPE? .ITEM ATOM>
<TYPE? <SET VAL
<PLOOKUP <ZSTR .ITEM>
,WORDS-POBL>>
PREP>
<SET PREP .VAL>>)
(<AND <TYPE? .ITEM LIST> <NOT <LENGTH? .ITEM 1>>>
<COND (<==? <SET OPER <1 .ITEM>> verb>
<SET VERB <2 .ITEM>>)
(<==? .OPER objo>
<SET PRSO <FWIM-ANA <REST .ITEM> .PREP>>)
(<==? .OPER obji>
<SET PRSI <FWIM-ANA <REST .ITEM> .PREP>>)
(<==? .OPER name> <SET NAME <2 .ITEM>>)
(<==? .OPER run>
<SET ACTION <2 .ITEM>>
<COND (<TYPE? .ACTION ATOM>
<OR <GASSIGNED? .ACTION>
<SETG .ACTION ,ZFALSE>>)
(<ILLEGAL "Bad run/CREATE">)>)
(<ILLEGAL "Unknown foo/CREATE">)>
<SET PREP <>>)
(<ILLEGAL "Bad syntax/CREATE">)>>
.ARGL>
<COND (<NOT .ACTION> <ILLEGAL "No routine specified/CREATE">)
(<TYPE? <SET VAL <PLOOKUP <SET STR <ZSTR .NAME>> ,WORDS-POBL>>
VERB>
<PUT .VAL 2 .ACTION>)
(<PINSERT .STR
,WORDS-POBL
<SET VAL <CHTYPE [<PSTRING .STR> .ACTION] VERB>>>)>
<SET SYN <CHTYPE [.PRSO .PRSI .VAL 0] SYNTAX>>
<COND
(<TYPE? <SET VAL <PLOOKUP <SET STR <ZSTR .VERB>> ,ACTIONS-POBL>>
ACTION>
<COND (<MAPR <>
<FUNCTION (SL "AUX" (X <1 .SL>))
#DECL ((SL) <UVECTOR [REST SYNTAX]> (X) SYNTAX)
<COND (<AND <==? <VPREP <1 .X>> <VPREP .PRSO>>
<==? <VPREP <2 .X>> <VPREP .PRSI>>>
<MAPLEAVE <PUT .SL 1 .SYN>>)>>
<2 .VAL>>)
(<PUT .VAL 2 <UVECTOR .SYN !<2 .VAL>>>)>)
(<PINSERT .STR
,ACTIONS-POBL
<SET VAL
<CHTYPE [<PSTRING .STR>
<UVECTOR .SYN>
<PNAME .VERB>] ACTION>>>)>
.VAL>
<DEFINE ZSTR (ATM "AUX" (STR <SPNAME .ATM>))
#DECL ((ATM) ATOM (STR) STRING)
<UPPERCASE <SUBSTRUC .STR 0 <MIN <LENGTH .STR> 5>>>>
<DEFINE FWIM-ANA (ARGL PREP "AUX" (V <IVECTOR 4>) (FWIM 0) (SUM 0) BIT)
#DECL ((ARGL) LIST (PREP) <OR FALSE PREP> (FWIM) FIX (BIT) <OR FALSE FIX>)
<PUT .V ,VPREP .PREP>
<PUT .V ,VBIT -1>
<COND (<EMPTY? .ARGL>
<SET ARGL (-1 hand room)>)>
<MAPF <>
<FUNCTION (ITEM)
#DECL ((ITEM) ANY)
<COND (<TYPE? .ITEM ATOM>
<COND (<SET BIT <ZLOOKUP <SPNAME .ITEM> ,ZOBITS-POBL>>
<SET FWIM <+ .FWIM .BIT>>)
(<==? .ITEM take>
<SET SUM <+ .SUM ,VTBIT ,VCBIT>>)
(<==? .ITEM try>
<SET SUM <+ .SUM ,VTBIT>>)
(<==? .ITEM have>
<SET SUM <+ .SUM ,VCBIT>>)
(<==? .ITEM room>
<SET SUM <+ .SUM ,VRBIT>>)
(<==? .ITEM hand>
<SET SUM <+ .SUM ,VABIT>>)>)
(<ILLEGAL "Bad syntax/CREATE">)>>
.ARGL>
<PUT .V ,VWORD .SUM>
<CHTYPE <PUT .V ,VFWIM .FWIM> VARG>>