1 | /* |
---|
2 | * Abuse - dark 2D side-scrolling platform game |
---|
3 | * Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net> |
---|
4 | * |
---|
5 | * This software was released into the Public Domain. As with most public |
---|
6 | * domain software, no warranty is made or implied by Sam Hocevar. |
---|
7 | */ |
---|
8 | |
---|
9 | struct func |
---|
10 | { |
---|
11 | char const *name; |
---|
12 | short min_args, max_args; |
---|
13 | }; |
---|
14 | |
---|
15 | /* select, digistr, load-file are not common lisp functions! */ |
---|
16 | |
---|
17 | struct func sys_funcs[] = |
---|
18 | { |
---|
19 | { "print", 1, -1 }, /* 0 */ |
---|
20 | { "car", 1, 1 }, /* 1 */ |
---|
21 | { "cdr", 1, 1 }, /* 2 */ |
---|
22 | { "length", 0, -1 }, /* 3 */ |
---|
23 | { "list", 0, -1 }, /* 4 */ |
---|
24 | { "cons", 2, 2 }, /* 5 */ |
---|
25 | { "quote", 1, 1 }, /* 6 */ |
---|
26 | { "eq", 2, 2 }, /* 7 */ |
---|
27 | { "+", 0, -1 }, /* 8 */ |
---|
28 | { "-", 1, -1 }, /* 9 */ |
---|
29 | { "if", 2, 3 }, /* 10 */ |
---|
30 | { "setf", 2, 2 }, /* 11 */ |
---|
31 | { "symbol-list", 0, 0 }, /* 12 */ |
---|
32 | { "assoc", 2, 2 }, /* 13 */ |
---|
33 | { "null", 1, 1 }, /* 14 */ |
---|
34 | { "acons", 2, 2 }, /* 15 */ |
---|
35 | { "pairlis", 2, 2 }, /* 16 */ |
---|
36 | { "let", 1, -1 }, /* 17 */ |
---|
37 | { "defun", 2, -1 }, /* 18 */ |
---|
38 | { "atom", 1, 1 }, /* 19 */ |
---|
39 | { "not", 1, 1 }, /* 20 */ |
---|
40 | { "and", -1, -1 }, /* 21 */ |
---|
41 | { "or", -1, -1 }, /* 22 */ |
---|
42 | { "progn", -1, -1 }, /* 23 */ |
---|
43 | { "equal", 2, 2 }, /* 24 */ |
---|
44 | { "concatenate", 1, -1 }, /* 25 */ |
---|
45 | { "char-code", 1, 1 }, /* 26 */ |
---|
46 | { "code-char", 1, 1 }, /* 27 */ |
---|
47 | { "*", -1, -1 }, /* 28 */ |
---|
48 | { "/", 1, -1 }, /* 29 */ |
---|
49 | { "cond", -1, -1 }, /* 30 */ |
---|
50 | { "select", 1, -1 }, /* 31 */ |
---|
51 | { "function", 1, 1 }, /* 32 */ |
---|
52 | { "mapcar", 2, -1 }, /* 33 */ |
---|
53 | { "funcall", 1, -1 }, /* 34 */ |
---|
54 | { ">", 2, 2 }, /* 35 */ |
---|
55 | { "<", 2, 2 }, /* 36 */ |
---|
56 | { "tmp-space", 0, 0 }, /* 37 */ |
---|
57 | { "perm-space", 0, 0 }, /* 38 */ |
---|
58 | { "symbol-name", 1, 1 }, /* 39 */ |
---|
59 | { "trace", 0, -1 }, /* 40 */ |
---|
60 | { "untrace", 0, -1 }, /* 41 */ |
---|
61 | { "digstr", 2, 2 }, /* 42 */ |
---|
62 | { "compile-file", 1, 1 }, /* 43 */ |
---|
63 | { "abs", 1, 1 }, /* 44 */ |
---|
64 | { "min", 2, 2 }, /* 45 */ |
---|
65 | { "max", 2, 2 }, /* 46 */ |
---|
66 | { ">=", 2, 2 }, /* 47 */ |
---|
67 | { "<=", 2, 2 }, /* 48 */ |
---|
68 | { "backquote", 1, 1 }, /* 49 */ |
---|
69 | { "comma", 1, 1 }, /* 50 */ |
---|
70 | { "nth", 2, 2 }, /* 51 */ |
---|
71 | { "resize-tmp", 1, 1 }, /* 52 */ |
---|
72 | { "resize-perm", 1, 1 }, /* 53 */ |
---|
73 | { "cos", 1, 1 }, /* 54 */ |
---|
74 | { "sin", 1, 1 }, /* 55 */ |
---|
75 | { "atan2", 2, 2 }, /* 56 */ |
---|
76 | { "enum", 1, -1 }, /* 57 */ |
---|
77 | { "quit", 0, 0 }, /* 58 */ |
---|
78 | { "eval", 1, 1 }, /* 59 */ |
---|
79 | { "break", 0, 0 }, /* 60 */ |
---|
80 | { "mod", 2, 2 }, /* 61 */ |
---|
81 | { "write_profile", 1, 1 }, /* 62 */ |
---|
82 | { "setq", 2, 2 }, /* 63 */ |
---|
83 | { "for", 4, -1 }, /* 64 */ |
---|
84 | { "open_file", 2, -1 }, /* 65 */ |
---|
85 | { "load", 1, 1 }, /* 66 */ |
---|
86 | { "bit-and", 1, -1 }, /* 67 */ |
---|
87 | { "bit-or", 1, -1 }, /* 68 */ |
---|
88 | { "bit-xor", 1, -1 }, /* 69 */ |
---|
89 | { "make-array", 1, -1 }, /* 70 */ |
---|
90 | { "aref", 2, 2 }, /* 71 */ |
---|
91 | { "if-1progn", 2, 3 }, /* 72 */ |
---|
92 | { "if-2progn", 2, 3 }, /* 73 */ |
---|
93 | { "if-12progn", 2, 3 }, /* 74 */ |
---|
94 | { "eq0", 1, 1 }, /* 75 */ |
---|
95 | { "preport", 1, 1 }, /* 76 */ |
---|
96 | { "search", 2, 2 }, /* 77 */ |
---|
97 | { "elt", 2, 2 }, /* 78 */ |
---|
98 | { "listp", 1, 1 }, /* 79 */ |
---|
99 | { "numberp", 1, 1 }, /* 80 */ |
---|
100 | { "do", 2, 3 }, /* 81 */ |
---|
101 | { "gc", 0, 0 }, /* 82 */ |
---|
102 | { "schar", 2, 2 }, /* 83 */ |
---|
103 | { "symbolp", 1, 1 }, /* 84 */ |
---|
104 | { "num2str", 1, 1 }, /* 85 */ |
---|
105 | { "nconc", 2, -1 }, /* 86 */ |
---|
106 | { "first", 1, 1 }, /* 87 */ |
---|
107 | { "second", 1, 1 }, /* 88 */ |
---|
108 | { "third", 1, 1 }, /* 89 */ |
---|
109 | { "fourth", 1, 1 }, /* 90 */ |
---|
110 | { "fifth", 1, 1 }, /* 91 */ |
---|
111 | { "sixth", 1, 1 }, /* 92 */ |
---|
112 | { "seventh", 1, 1 }, /* 93 */ |
---|
113 | { "eighth", 1, 1 }, /* 94 */ |
---|
114 | { "ninth", 1, 1 }, /* 95 */ |
---|
115 | { "tenth", 1, 1 }, /* 96 */ |
---|
116 | { "substr", 3, 3 }, /* 97 */ |
---|
117 | { "local_load", 1, 1 }, /* 98 */ |
---|
118 | }; |
---|
119 | |
---|
120 | enum sys_func_index |
---|
121 | { |
---|
122 | SYS_FUNC_PRINT = 0, |
---|
123 | SYS_FUNC_CAR = 1, |
---|
124 | SYS_FUNC_CDR = 2, |
---|
125 | SYS_FUNC_LENGTH = 3, |
---|
126 | SYS_FUNC_LIST = 4, |
---|
127 | SYS_FUNC_CONS = 5, |
---|
128 | SYS_FUNC_QUOTE = 6, |
---|
129 | SYS_FUNC_EQ = 7, |
---|
130 | SYS_FUNC_PLUS = 8, |
---|
131 | SYS_FUNC_MINUS = 9, |
---|
132 | SYS_FUNC_IF = 10, |
---|
133 | SYS_FUNC_SETF = 11, |
---|
134 | SYS_FUNC_SYMBOL_LIST = 12, |
---|
135 | SYS_FUNC_ASSOC = 13, |
---|
136 | SYS_FUNC_NULL = 14, |
---|
137 | SYS_FUNC_ACONS = 15, |
---|
138 | SYS_FUNC_PAIRLIS = 16, |
---|
139 | SYS_FUNC_LET = 17, |
---|
140 | SYS_FUNC_DEFUN = 18, |
---|
141 | SYS_FUNC_ATOM = 19, |
---|
142 | SYS_FUNC_NOT = 20, |
---|
143 | SYS_FUNC_AND = 21, |
---|
144 | SYS_FUNC_OR = 22, |
---|
145 | SYS_FUNC_PROGN = 23, |
---|
146 | SYS_FUNC_EQUAL = 24, |
---|
147 | SYS_FUNC_CONCATENATE = 25, |
---|
148 | SYS_FUNC_CHAR_CODE = 26, |
---|
149 | SYS_FUNC_CODE_CHAR = 27, |
---|
150 | SYS_FUNC_TIMES = 28, |
---|
151 | SYS_FUNC_SLASH = 29, |
---|
152 | SYS_FUNC_COND = 30, |
---|
153 | SYS_FUNC_SELECT = 31, |
---|
154 | SYS_FUNC_FUNCTION = 32, |
---|
155 | SYS_FUNC_MAPCAR = 33, |
---|
156 | SYS_FUNC_FUNCALL = 34, |
---|
157 | SYS_FUNC_GT = 35, |
---|
158 | SYS_FUNC_LT = 36, |
---|
159 | SYS_FUNC_TMP_SPACE = 37, |
---|
160 | SYS_FUNC_PERM_SPACE = 38, |
---|
161 | SYS_FUNC_SYMBOL_NAME = 39, |
---|
162 | SYS_FUNC_TRACE = 40, |
---|
163 | SYS_FUNC_UNTRACE = 41, |
---|
164 | SYS_FUNC_DIGSTR = 42, |
---|
165 | SYS_FUNC_COMPILE_FILE = 43, |
---|
166 | SYS_FUNC_ABS = 44, |
---|
167 | SYS_FUNC_MIN = 45, |
---|
168 | SYS_FUNC_MAX = 46, |
---|
169 | SYS_FUNC_GE = 47, |
---|
170 | SYS_FUNC_LE = 48, |
---|
171 | SYS_FUNC_BACKQUOTE = 49, |
---|
172 | SYS_FUNC_COMMA = 50, |
---|
173 | SYS_FUNC_NTH = 51, |
---|
174 | SYS_FUNC_RESIZE_TMP = 52, |
---|
175 | SYS_FUNC_RESIZE_PERM = 53, |
---|
176 | SYS_FUNC_COS = 54, |
---|
177 | SYS_FUNC_SIN = 55, |
---|
178 | SYS_FUNC_ATAN2 = 56, |
---|
179 | SYS_FUNC_ENUM = 57, |
---|
180 | SYS_FUNC_QUIT = 58, |
---|
181 | SYS_FUNC_EVAL = 59, |
---|
182 | SYS_FUNC_BREAK = 60, |
---|
183 | SYS_FUNC_MOD = 61, |
---|
184 | SYS_FUNC_WRITE_PROFILE = 62, |
---|
185 | SYS_FUNC_SETQ = 63, |
---|
186 | SYS_FUNC_FOR = 64, |
---|
187 | SYS_FUNC_OPEN_FILE = 65, |
---|
188 | SYS_FUNC_LOAD = 66, |
---|
189 | SYS_FUNC_BIT_AND = 67, |
---|
190 | SYS_FUNC_BIT_OR = 68, |
---|
191 | SYS_FUNC_BIT_XOR = 69, |
---|
192 | SYS_FUNC_MAKE_ARRAY = 70, |
---|
193 | SYS_FUNC_AREF = 71, |
---|
194 | SYS_FUNC_IF_1PROGN = 72, |
---|
195 | SYS_FUNC_IF_2PROGN = 73, |
---|
196 | SYS_FUNC_IF_12PROGN = 74, |
---|
197 | SYS_FUNC_EQ0 = 75, |
---|
198 | SYS_FUNC_PREPORT = 76, |
---|
199 | SYS_FUNC_SEARCH = 77, |
---|
200 | SYS_FUNC_ELT = 78, |
---|
201 | SYS_FUNC_LISTP = 79, |
---|
202 | SYS_FUNC_NUMBERP = 80, |
---|
203 | SYS_FUNC_DO = 81, |
---|
204 | SYS_FUNC_GC = 82, |
---|
205 | SYS_FUNC_SCHAR = 83, |
---|
206 | SYS_FUNC_SYMBOLP = 84, |
---|
207 | SYS_FUNC_NUM2STR = 85, |
---|
208 | SYS_FUNC_NCONC = 86, |
---|
209 | SYS_FUNC_FIRST = 87, |
---|
210 | SYS_FUNC_SECOND = 88, |
---|
211 | SYS_FUNC_THIRD = 89, |
---|
212 | SYS_FUNC_FOURTH = 90, |
---|
213 | SYS_FUNC_FIFTH = 91, |
---|
214 | SYS_FUNC_SIXTH = 92, |
---|
215 | SYS_FUNC_SEVENTH = 93, |
---|
216 | SYS_FUNC_EIGHTH = 94, |
---|
217 | SYS_FUNC_NINTH = 95, |
---|
218 | SYS_FUNC_TENTH = 96, |
---|
219 | SYS_FUNC_SUBSTR = 97, |
---|
220 | SYS_FUNC_LOCAL_LOAD = 98, |
---|
221 | }; |
---|
222 | |
---|