zork/syntax.mud

89 lines
2.8 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<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>>