[133] | 1 | /* |
---|
| 2 | * Abuse - dark 2D side-scrolling platform game |
---|
| 3 | * Copyright (c) 2008 Sam Hocevar |
---|
| 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 | |
---|