makstr.7 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <DEFINE CEVENT (TICK APP FLG NAME "AUX" (OBL <GET INITIAL OBLIST>) ATM)
  2. #DECL ((TICK) FIX (APP) <OR APPLICABLE OFFSET> (FLG) <OR ATOM FALSE>
  3. (NAME) <OR ATOM STRING> (ATM) <OR ATOM FALSE>)
  4. <COND (<TYPE? .NAME STRING>
  5. <COND (<SET ATM <LOOKUP .NAME .OBL>>)
  6. (T <SET ATM <INSERT .NAME .OBL>>)>)
  7. (<SET ATM .NAME>)>
  8. <SETG .ATM <CHTYPE [.TICK .APP .FLG .ATM] CEVENT>>>
  9. <DEFINE CONS-OBJ ("TUPLE" OBJS "AUX" (WINNER ,WINNER))
  10. #DECL ((OBJS) <TUPLE [REST STRING]> (WINNER) ADV)
  11. <MAPF <>
  12. <FUNCTION (X "AUX" (Y <FIND-OBJ .X>))
  13. #DECL ((Y) OBJECT)
  14. <OR <MEMQ .Y <AOBJS .WINNER>>
  15. <TAKE-OBJECT <FIND-OBJ .X> .WINNER>>>
  16. .OBJS>>
  17. <DEFINE CEXIT (FLID RMID "OPTIONAL" (STR <>) (FLAG <>) (FUNCT <>) "AUX" (FVAL <>) ATM)
  18. #DECL ((STR) <OR FALSE STRING> (FLID RMID) <OR ATOM STRING>
  19. (ATM FUNCT) <OR ATOM FALSE> (FVAL) <OR APPLICABLE FALSE>
  20. (FLAG) <OR ATOM FALSE>)
  21. <COND (<TYPE? .FLID ATOM> <SET FLID <SPNAME .FLID>>)>
  22. <SET ATM <OR <LOOKUP .FLID <GET FLAG OBLIST>>
  23. <INSERT .FLID <GET FLAG OBLIST>>>>
  24. <SETG .ATM .FLAG>
  25. <CHTYPE <VECTOR .ATM <FIND-ROOM .RMID> .STR .FUNCT> CEXIT>>
  26. <DEFINE EXIT ("TUPLE" PAIRS "AUX" (DOBL ,DIRECTIONS)
  27. (FROB <IVECTOR <LENGTH .PAIRS>>))
  28. #DECL ((PAIRS) <TUPLE [REST STRING <OR NEXIT CEXIT STRING ATOM>]>
  29. (DIR) <LIST [REST ATOM]> (FROB) VECTOR (DOBL) OBLIST)
  30. <REPEAT (ATM RM (F .FROB))
  31. #DECL ((ATM) <OR ATOM FALSE> (RM) <OR ROOM FALSE> (F) VECTOR)
  32. <COND (<OR
  33. <AND <SET ATM <LOOKUP <1 .PAIRS> .DOBL>>
  34. <GASSIGNED? .ATM>
  35. <TYPE? ,.ATM DIRECTION>>>
  36. <PUT .F 1 .ATM>
  37. <COND (<TYPE? <2 .PAIRS> STRING>
  38. <PUT .F 2 <FIND-ROOM <2 .PAIRS>>>)
  39. (<PUT .F 2 <2 .PAIRS>>)>
  40. <SET F <REST .F 2>>)
  41. (T
  42. <PUT .PAIRS 1 <ERROR ILLEGAL-DIRECTION <1 .PAIRS>>>)>
  43. <COND (<EMPTY? <SET PAIRS <REST .PAIRS 2>>>
  44. <RETURN>)>>
  45. <CHTYPE .FROB EXIT>>
  46. <DEFINE ROOM (ID D1 D2 LIT? EX "OPTIONAL" (OBJS ()) (APP <>) (VAL 0) (BIT ,RLANDBIT)
  47. "AUX" (RM <FIND-ROOM .ID>))
  48. #DECL ((ID) <OR STRING ATOM> (D1 D2) STRING (LIT?) <OR ATOM FORM FALSE>
  49. (EX) EXIT (APP) <OR FORM FALSE ATOM> (VAL BIT) FIX (RM) ROOM)
  50. <SETG SCORE-MAX <+ ,SCORE-MAX .VAL>>
  51. <PUT .RM ,RBITS .BIT>
  52. <PUT .RM ,RVAL .VAL>
  53. <PUT .RM ,ROBJS .OBJS>
  54. <PUT .RM ,RDESC1 .D1>
  55. <PUT .RM ,RDESC2 .D2>
  56. <PUT .RM ,REXITS .EX>
  57. <PUT .RM ,RACTION <COND (<TYPE? .APP FALSE FORM> <>)
  58. (.APP)>>
  59. <PUT .RM ,RLIGHT? <COND (<TYPE? .LIT? FORM> <>)
  60. (T .LIT?)>>
  61. <MAPF <>
  62. <FUNCTION (X) #DECL ((X) OBJECT)
  63. <PUT .X ,OROOM .RM>>
  64. <ROBJS .RM>>
  65. .RM>
  66. <DEFINE SOBJECT (ID STR "TUPLE" TUP)
  67. #DECL ((ID) STRING (TUP) TUPLE)
  68. <OBJECT .ID "" .STR %<> <> () <> <+ !.TUP>>>
  69. <DEFINE AOBJECT (ID STR APP "TUPLE" TUP)
  70. #DECL ((ID) STRING (TUP) TUPLE (APP) ATOM)
  71. <OBJECT .ID "" .STR %<> .APP () <> <+ !.TUP>>>
  72. <DEFINE OBJECT (ID DESC1 DESC2 DESCO APP CONTS CAN FLAGS
  73. "OPTIONAL" (LIGHT? 0) (S1 0) (S2 0) (SIZE 5) (CAPAC 0))
  74. #DECL ((ID) <OR ATOM STRING> (DESC1 DESC2) STRING (APP) <OR FALSE FORM ATOM>
  75. (CONTS) <LIST [REST OBJECT]> (CAN) <OR FALSE OBJECT>
  76. (FLAGS) <PRIMTYPE WORD> (SIZE CAPAC) FIX
  77. (LIGHT? S1 S2) FIX (DESCO) <OR STRING FALSE>)
  78. <SETG SCORE-MAX <+ ,SCORE-MAX .S1 .S2>>
  79. <OR <0? .LIGHT?> <SET FLAGS <+ .FLAGS ,LIGHTBIT>>>
  80. <PUT
  81. <PUT
  82. <PUT
  83. <PUT
  84. <PUT
  85. <PUT
  86. <PUT
  87. <PUT
  88. <PUT
  89. <PUT
  90. <PUT
  91. <PUT <FIND-OBJ .ID>
  92. ,ODESC1
  93. .DESC1>
  94. ,OCAPAC
  95. .CAPAC>
  96. ,OSIZE
  97. .SIZE>
  98. ,ODESCO
  99. .DESCO>
  100. ,OLIGHT?
  101. .LIGHT?>
  102. ,OFLAGS
  103. .FLAGS>
  104. ,OFVAL
  105. .S1>
  106. ,OTVAL
  107. .S2>
  108. ,OCAN
  109. .CAN>
  110. ,OCONTENTS
  111. .CONTS>
  112. ,ODESC2
  113. .DESC2>
  114. ,OACTION
  115. <COND (<TYPE? .APP FALSE FORM> <>)
  116. (.APP)>>>
  117. <DEFINE FIND-PREP (STR "AUX" (ATM <ADD-WORD .STR>))
  118. #DECL ((STR) STRING (ATM) <OR FALSE ATOM>)
  119. <COND (<GASSIGNED? .ATM>
  120. <COND (<TYPE? ,.ATM PREP> ,.ATM)
  121. (<ERROR NO-PREP!-ERRORS>)>)
  122. (<SETG .ATM <CHTYPE .ATM PREP>>)>>
  123. <DEFINE ADD-ACTION (NAM STR "TUPLE" DECL
  124. "AUX" (ATM <OR <LOOKUP .NAM ,ACTIONS>
  125. <INSERT .NAM ,ACTIONS>>))
  126. #DECL ((NAM STR) STRING (DECL) <TUPLE [REST VECTOR]> (ATM) ATOM)
  127. <SETG .ATM <CHTYPE [.ATM <MAKE-ACTION !.DECL> .STR] ACTION>>
  128. .ATM>
  129. <DEFINE ADD-DIRECTIONS ("TUPLE" NMS "AUX" (DIR ,DIRECTIONS) ATM)
  130. #DECL ((NMS) <TUPLE [REST STRING]> (DIR) OBLIST (ATM) ATOM)
  131. <MAPF <> <FUNCTION (X) <SETG <SET ATM <OR <LOOKUP .X .DIR> <INSERT .X .DIR>>>
  132. <CHTYPE .ATM DIRECTION>>>
  133. .NMS>>
  134. <DEFINE DSYNONYM (STR "TUPLE" NMS "AUX" VAL (DIR ,DIRECTIONS) ATM)
  135. #DECL ((ATM) ATOM (STR) STRING (NMS) <TUPLE [REST STRING]>
  136. (VAL) DIRECTION (DIR) OBLIST)
  137. <SET VAL <ADD-DIRECTIONS .STR>>
  138. <MAPF <> <FUNCTION (X) <SETG <SET ATM <OR <LOOKUP .X .DIR> <INSERT .X .DIR>>>
  139. .VAL>>
  140. .NMS>>
  141. <DEFINE VSYNONYM (N1 "TUPLE" N2 "AUX" ATM VAL)
  142. #DECL ((N1) STRING (N2) <TUPLE [REST STRING]> (ATM) <OR FALSE ATOM>
  143. (VAL) ANY)
  144. <COND (<SET ATM <LOOKUP .N1 ,WORDS>>
  145. <SET VAL ,.ATM>
  146. <MAPF <> <FUNCTION (X) <SETG <ADD-WORD .X> .VAL>> .N2>)>
  147. <COND (<SET ATM <LOOKUP .N1 ,ACTIONS>>
  148. <SET VAL ,.ATM>
  149. <MAPF <> <FUNCTION (X) <SETG <OR <LOOKUP .X ,ACTIONS>
  150. <INSERT .X ,ACTIONS>>
  151. .VAL>> .N2>)>>
  152. "STUFF FOR ADDING TO VOCABULARY, ADDING TO LISTS (OF DEMONS, FOR EXAMPLE)."
  153. <DEFINE ADD-WORD (W)
  154. #DECL ((W) STRING)
  155. <OR <LOOKUP .W ,WORDS> <INSERT .W ,WORDS>>>
  156. <DEFINE ADD-BUZZ ("TUPLE" W)
  157. #DECL ((W) <TUPLE [REST STRING]>)
  158. <MAPF <>
  159. <FUNCTION (X)
  160. #DECL ((X) STRING)
  161. <SETG <ADD-WORD .X> <CHTYPE .X BUZZ>>>
  162. .W>>
  163. <DEFINE ADD-ZORK (NM "TUPLE" W)
  164. #DECL ((NM) ATOM (W) <TUPLE [REST STRING]>)
  165. <MAPF <>
  166. <FUNCTION (X "AUX" ATM)
  167. #DECL ((X) STRING (ATM) ATOM)
  168. <SETG <SET ATM <ADD-WORD .X>> <CHTYPE .ATM .NM>>>
  169. .W>>
  170. <DEFINE ADD-OBJECT (OBJ NAMES "OPTIONAL" (ADJ '[]) "AUX" (OBJS ,OBJECT-OBL))
  171. #DECL ((OBJ) OBJECT (NAMES ADJ) <VECTOR [REST STRING]> (OBJS) OBLIST)
  172. <PUT .OBJ
  173. ,ONAMES
  174. <MAPF ,UVECTOR
  175. <FUNCTION (X)
  176. #DECL ((X) STRING)
  177. <OR <LOOKUP .X .OBJS> <INSERT .X .OBJS>>>
  178. .NAMES>>
  179. <PUT .OBJ ,OADJS <MAPF ,UVECTOR <FUNCTION (W) <ADD-ZORK ADJECTIVE .W>> .ADJ>>
  180. <CHUTYPE <OADJS .OBJ> ADJECTIVE>
  181. .OBJ>
  182. <DEFINE SYNONYM (N1 "TUPLE" N2 "AUX" ATM VAL)
  183. #DECL ((N1) STRING (N2) <TUPLE [REST STRING]> (ATM) <OR FALSE ATOM>
  184. (VAL) ANY)
  185. <COND (<SET ATM <LOOKUP .N1 ,WORDS>>
  186. <SET VAL ,.ATM>
  187. <MAPF <> <FUNCTION (X) <SETG <ADD-WORD .X> .VAL>> .N2>)>>
  188. <DEFINE ADD-ABBREV (X Y "AUX")
  189. #DECL ((X Y) STRING)
  190. <SETG <ADD-WORD .X> <OR <LOOKUP .Y ,WORDS> <INSERT .Y ,WORDS>>>>
  191. <DEFINE ADD-DEMON (X) #DECL ((X) HACK)
  192. <COND (<MAPR <>
  193. <FUNCTION (Y) #DECL ((Y) <LIST [REST HACK]>)
  194. <COND (<==? <HACTION <1 .Y>> <HACTION .X>>
  195. <PUT .Y 1 .X>
  196. <MAPLEAVE T>)>>
  197. ,DEMONS>)
  198. (<SETG DEMONS (.X !,DEMONS)>)>>
  199. <DEFINE ADD-STAR (OBJ) <SETG STARS (.OBJ !,STARS)>>
  200. <DEFINE ADD-ACTOR (ADV "AUX" (ACTORS ,ACTORS))
  201. #DECL ((ADV) ADV (ACTORS) <LIST [REST ADV]>)
  202. <COND (<MAPF <>
  203. <FUNCTION (X) #DECL ((X) ADV)
  204. <COND (<==? <AOBJ .X> <AOBJ .ADV>>
  205. <MAPLEAVE T>)>>
  206. .ACTORS>)
  207. (<SETG ACTORS (.ADV !.ACTORS)>)>
  208. .ADV>
  209. <DEFINE ADD-DESC (OBJ STR)
  210. #DECL ((OBJ) OBJECT (STR) STRING)
  211. <PUT .OBJ ,OREAD .STR>>
  212. <DEFINE SADD-ACTION (STR1 ATM)
  213. <ADD-ACTION .STR1 "" [[.STR1 .ATM]]>>
  214. <DEFINE 1ADD-ACTION (STR1 STR2 ATM)
  215. <ADD-ACTION .STR1 .STR2 [OBJ [.STR1 .ATM]]>>
  216. <DEFINE AADD-ACTION (STR1 STR2 ATM)
  217. <ADD-ACTION .STR1 .STR2 [(-1 AOBJS NO-TAKE) [.STR1 .ATM]]>>