89 lines
2.8 KiB
Plaintext
89 lines
2.8 KiB
Plaintext
|
|
|||
|
<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>> |