blob: 9d4a237c1cc58d270358aa9cfbc0bb104e66162e [file] [log] [blame]
Jack Palevichae54f1f2009-05-08 14:54:15 -07001/*
2 **
3 ** Copyright 2009, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
Jack Palevich88311482009-05-08 13:57:37 -070017
Jack Palevichae54f1f2009-05-08 14:54:15 -070018/* Based upon the freeware version of the Obfuscated Tiny C Compiler
Jack Palevichd1605302009-05-08 15:26:24 -070019 * by Francis Bellard. <francis@bellard.org>.
Jack Palevichae54f1f2009-05-08 14:54:15 -070020 */
21
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25
Jack Palevichf0cbc922009-05-08 16:35:13 -070026#define TOKEN_OPERATOR 1
27#define TOKEN_NUMBER 2
28#define TOKEN_DEFINE 536
29
30static int currentToken;
31static int currentTokenData;
32static int C;
33static int currentChar;
34static int K;
35static int q;
36static int G;
37static int savedChar;
38static char* pInProgressMacro;
Jack Palevich50791f52009-05-08 15:44:22 -070039static char* P;
40static char* ac;
41static char* v;
Jack Palevichf0cbc922009-05-08 16:35:13 -070042static char* pSymbolTable;
Jack Palevich50791f52009-05-08 15:44:22 -070043static char* M;
44static char* R;
Jack Palevichf0cbc922009-05-08 16:35:13 -070045static FILE* pInput;
Jack Palevichae54f1f2009-05-08 14:54:15 -070046
Jack Palevich50791f52009-05-08 15:44:22 -070047static void ab (int j);
48static void w();
Jack Palevichae54f1f2009-05-08 14:54:15 -070049
Jack Palevich50791f52009-05-08 15:44:22 -070050static void addToSymbolTable(char e) {
Jack Palevichf0cbc922009-05-08 16:35:13 -070051 *pSymbolTable++ = e;
Jack Palevich88311482009-05-08 13:57:37 -070052}
Jack Palevichae54f1f2009-05-08 14:54:15 -070053
Jack Palevichf0cbc922009-05-08 16:35:13 -070054static void nextChar() {
55 if (pInProgressMacro) {
56 currentChar = *(char*) pInProgressMacro++;
57 if (currentChar == 2) {
58 pInProgressMacro = NULL;
59 currentChar = savedChar;
Jack Palevichae54f1f2009-05-08 14:54:15 -070060 }
61 } else
Jack Palevichf0cbc922009-05-08 16:35:13 -070062 currentChar = fgetc(pInput);
Jack Palevich88311482009-05-08 13:57:37 -070063}
Jack Palevichae54f1f2009-05-08 14:54:15 -070064
Jack Palevichf0cbc922009-05-08 16:35:13 -070065static int isSymbolChar() {
66 return isalnum(currentChar) || currentChar == '_';
Jack Palevich88311482009-05-08 13:57:37 -070067}
Jack Palevichae54f1f2009-05-08 14:54:15 -070068
Jack Palevichf0cbc922009-05-08 16:35:13 -070069static void unescapeCurrentChar() {
70 if (currentChar == '\\') {
71 nextChar();
72 if (currentChar == 'n')
73 currentChar = '\n';
Jack Palevichae54f1f2009-05-08 14:54:15 -070074 }
Jack Palevich88311482009-05-08 13:57:37 -070075}
Jack Palevichae54f1f2009-05-08 14:54:15 -070076
Jack Palevichf0cbc922009-05-08 16:35:13 -070077static void nextToken() {
Jack Palevichae54f1f2009-05-08 14:54:15 -070078 int j, m;
Jack Palevichf0cbc922009-05-08 16:35:13 -070079 while (isspace(currentChar) || currentChar == '#') {
80 if (currentChar == '#') {
81 nextChar();
82 nextToken();
83 if (currentToken == TOKEN_DEFINE) {
84 nextToken();
85 addToSymbolTable(' ');
86 *(int*) currentToken = 1;
87 *(int*) (currentToken + 4) = (int) pSymbolTable;
Jack Palevichae54f1f2009-05-08 14:54:15 -070088 }
Jack Palevichf0cbc922009-05-08 16:35:13 -070089 while (currentChar != '\n') {
90 addToSymbolTable(currentChar);
91 nextChar();
Jack Palevichae54f1f2009-05-08 14:54:15 -070092 }
Jack Palevichf0cbc922009-05-08 16:35:13 -070093 addToSymbolTable(currentChar);
Jack Palevich50791f52009-05-08 15:44:22 -070094 addToSymbolTable(2);
Jack Palevichae54f1f2009-05-08 14:54:15 -070095 }
Jack Palevichf0cbc922009-05-08 16:35:13 -070096 nextChar();
Jack Palevichae54f1f2009-05-08 14:54:15 -070097 }
98 C = 0;
Jack Palevichf0cbc922009-05-08 16:35:13 -070099 currentToken = currentChar;
100 if (isSymbolChar()) {
101 addToSymbolTable(' ');
102 M = pSymbolTable;
103 while (isSymbolChar()) {
104 addToSymbolTable(currentChar);
105 nextChar();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700106 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700107 if (isdigit(currentToken)) {
108 currentTokenData = strtol(M, 0, 0);
109 currentToken = TOKEN_NUMBER;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700110 } else {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700111 *(char*) pSymbolTable = ' ';
112 currentToken = strstr(R, M - 1) - R;
113 *(char*) pSymbolTable = 0;
114 currentToken = currentToken * 8 + 256;
115 if (currentToken > TOKEN_DEFINE) {
116 currentToken = ((int) P) + currentToken;
117 if (*(int*) currentToken == 1) {
118 pInProgressMacro = (char*) (*(int*) (currentToken + 4));
119 savedChar = currentChar;
120 nextChar();
121 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700122 }
123 }
124 }
125 } else {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700126 nextChar();
127 if (currentToken == '\'') {
128 currentToken = TOKEN_NUMBER;
129 unescapeCurrentChar();
130 currentTokenData = currentChar;
131 nextChar();
132 nextChar();
133 } else if (currentToken == '/' & currentChar == '*') {
134 nextChar();
135 while (currentChar) {
136 while (currentChar != '*')
137 nextChar();
138 nextChar();
139 if (currentChar == '/')
140 currentChar = 0;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700141 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700142 nextChar();
143 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700144 } else {
145 char* e = "++#m--%am*@R<^1c/@%[_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!='g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
146 while (j = *(char*) e++) {
147 m = *(char*) e++;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700148 currentTokenData = 0;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700149 while ((C = *(char*) e++ - 98) < 0)
Jack Palevichf0cbc922009-05-08 16:35:13 -0700150 currentTokenData = currentTokenData * 64 + C + 64;
151 if (j == currentToken && (m == currentChar || m == 64)) {
152 if (m == currentChar) {
153 nextChar();
154 currentToken = TOKEN_OPERATOR;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700155 }
156 break;
157 }
158 }
159 }
160 }
Jack Palevich88311482009-05-08 13:57:37 -0700161}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700162
Jack Palevich50791f52009-05-08 15:44:22 -0700163static void ae( g) {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700164 while( g && g != -1) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700165 *(char*) q++=g;
166 g=g>>8;
167 }
Jack Palevich88311482009-05-08 13:57:37 -0700168}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700169
Jack Palevich50791f52009-05-08 15:44:22 -0700170static void A(e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700171 int g;
172 while( e) {
173 g=*(int*) e;
174 *(int*) e=q-e-4;
175 e=g;
176 }
Jack Palevich88311482009-05-08 13:57:37 -0700177}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700178
Jack Palevich50791f52009-05-08 15:44:22 -0700179static int s( g, e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700180 ae(g);
181 *(int*) q = e;
182 e = q;
183 q = q + 4;
184 return e;
Jack Palevich88311482009-05-08 13:57:37 -0700185}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700186
Jack Palevich50791f52009-05-08 15:44:22 -0700187static int H(e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700188 s(184,e);
Jack Palevich88311482009-05-08 13:57:37 -0700189}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700190
Jack Palevich50791f52009-05-08 15:44:22 -0700191static int B(e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700192 return s(233,e);
Jack Palevich88311482009-05-08 13:57:37 -0700193}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700194
Jack Palevich50791f52009-05-08 15:44:22 -0700195static int S( j, e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700196 ae(1032325);
197 return s(132 + j, e);
Jack Palevich88311482009-05-08 13:57:37 -0700198}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700199
Jack Palevich50791f52009-05-08 15:44:22 -0700200static void Z(e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700201 ae( 49465);
202 H(0);
203 ae( 15);
204 ae( e+144);
205 ae( 192);
Jack Palevich88311482009-05-08 13:57:37 -0700206}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700207
Jack Palevich50791f52009-05-08 15:44:22 -0700208static void N( j, e) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700209 ae(j + 131);
210 s((e < 512) << 7 | 5, e);
Jack Palevich88311482009-05-08 13:57:37 -0700211}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700212
Jack Palevich50791f52009-05-08 15:44:22 -0700213static void T (j) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700214 int g,e,m,aa;
215 g=1;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700216 if( currentToken == 34) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700217 H(v);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700218 while( currentChar!=34) {
219 unescapeCurrentChar ();
220 *(char*) v++=currentChar;
221 nextChar ();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700222 }
223 *(char*) v=0;
224 v= (char*) (((int)v) +4&-4);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700225 nextChar ();
226 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700227 }
228 else {
229 aa=C;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700230 m= currentTokenData;
231 e=currentToken;
232 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700233 if( e == 2) {
234 H(m);
235 }
236 else if( aa == 2) {
237 T(0);
238 s(185,0);
239 if( e == 33)Z(m);
240 else ae( m);
241 }
242 else if( e == 40) {
243 w ();
Jack Palevichf0cbc922009-05-08 16:35:13 -0700244 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700245 }
246 else if( e == 42) {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700247 nextToken();
248 e=currentToken;
249 nextToken();
250 nextToken();
251 if( currentToken == 42) {
252 nextToken();
253 nextToken();
254 nextToken();
255 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700256 e=0;
257 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700258 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700259 T(0);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700260 if( currentToken == 61) {
261 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700262 ae( 80);
263 w ();
264 ae( 89);
265 ae( 392+(e == 256));
266 }
267 else if( e) {
268 if( e == 256)ae( 139);
269 else ae( 48655);
270 q++;
271 }
272 }
273 else if( e == 38) {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700274 N(10,*(int*) currentToken);
275 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700276 }
277 else {
278 g=*(int*) e;
279 if(!g)g=dlsym(0,M);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700280 if( currentToken == 61&j) {
281 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700282 w ();
283 N(6,g);
284 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700285 else if( currentToken!= 40) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700286 N(8,g);
287 if( C == 11) {
288 N(0,g);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700289 ae( currentTokenData);
290 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700291 }
292 }
293 }
294 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700295 if( currentToken == 40) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700296 if( g == 1)ae( 80);
297 m= s(60545,0);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700298 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700299 j=0;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700300 while( currentToken!= 41) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700301 w ();
302 s(2393225,j);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700303 if( currentToken == 44)nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700304 j=j +4;
305 }
306 *(int*) m= j;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700307 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700308 if(!g) {
309 e=e +4;
310 *(int*) e=s(232,*(int*) e);
311 }
312 else if( g == 1) {
313 s(2397439,j);
314 j=j +4;
315 }
316 else {
317 s(232,g-q-5);
318 }
319 if( j)s(50305,j);
320 }
Jack Palevich88311482009-05-08 13:57:37 -0700321}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700322
Jack Palevich50791f52009-05-08 15:44:22 -0700323static void O (j) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700324 int e,g,m;
325 if( j--== 1)T(1);
326 else {
327 O (j);
328 m= 0;
329 while( j == C) {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700330 g=currentToken;
331 e=currentTokenData;
332 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700333 if( j>8) {
334 m= S(e,m);
335 O (j);
336 }
337 else {
338 ae( 80);
339 O (j);
340 ae( 89);
341 if( j == 4|j == 5) {
342 Z(e);
343 }
344 else {
345 ae( e);
346 if( g == 37)ae( 146);
347 }
348 }
349 }
350 if( m&&j>8) {
351 m= S(e,m);
352 H(e^1);
353 B(5);
354 A(m);
355 H(e);
356 }
357 }
Jack Palevich88311482009-05-08 13:57:37 -0700358}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700359
Jack Palevich50791f52009-05-08 15:44:22 -0700360static void w() {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700361 O(11);
Jack Palevich88311482009-05-08 13:57:37 -0700362}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700363
Jack Palevich50791f52009-05-08 15:44:22 -0700364static int U() {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700365 w();
366 return S(0, 0);
Jack Palevich88311482009-05-08 13:57:37 -0700367}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700368
Jack Palevich50791f52009-05-08 15:44:22 -0700369static void I (j) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700370 int m,g,e;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700371 if( currentToken == 288) {
372 nextToken();
373 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700374 m= U ();
Jack Palevichf0cbc922009-05-08 16:35:13 -0700375 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700376 I (j);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700377 if( currentToken == 312) {
378 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700379 g=B(0);
380 A(m);
381 I (j);
382 A(g);
383 }
384 else {
385 A(m);
386 }
387 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700388 else if( currentToken == 352|currentToken == 504) {
389 e=currentToken;
390 nextToken();
391 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700392 if( e == 352) {
393 g=q;
394 m= U ();
395 }
396 else {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700397 if( currentToken!= 59)w ();
398 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700399 g=q;
400 m= 0;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700401 if( currentToken!= 59)m= U ();
402 nextToken();
403 if( currentToken!= 41) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700404 e=B(0);
405 w ();
406 B(g-q-5);
407 A(e);
408 g=e +4;
409 }
410 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700411 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700412 I(&m);
413 B(g-q-5);
414 A(m);
415 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700416 else if( currentToken == 123) {
417 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700418 ab(1);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700419 while( currentToken!= 125)I (j);
420 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700421 }
422 else {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700423 if( currentToken == 448) {
424 nextToken();
425 if( currentToken!= 59)w ();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700426 K=B(K);
427 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700428 else if( currentToken == 400) {
429 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700430 *(int*) j=B(*(int*) j);
431 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700432 else if( currentToken!= 59)w ();
433 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700434 }
Jack Palevich88311482009-05-08 13:57:37 -0700435}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700436
Jack Palevich50791f52009-05-08 15:44:22 -0700437static void ab (int j) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700438 int m;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700439 while( currentToken == 256 | currentToken != -1 & !j ) {
440 if( currentToken == 256) {
441 nextToken();
442 while( currentToken!= 59) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700443 if( j ) {
444 G=G +4;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700445 *(int*) currentToken=-G;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700446 }
447 else {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700448 *(char**) currentToken = v;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700449 v=v +4;
450 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700451 nextToken();
452 if( currentToken == 44)nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700453 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700454 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700455 }
456 else {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700457 A(*(int*)(currentToken +4));
458 *(int*) currentToken=q;
459 nextToken();
460 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700461 m= 8;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700462 while( currentToken!= 41) {
463 *(int*) currentToken=m;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700464 m= m +4;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700465 nextToken();
466 if( currentToken == 44)nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700467 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700468 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700469 K=G=0;
470 ae( 15042901);
471 m= s(60545,0);
472 I(0);
473 A(K);
474 ae( 50121);
475 *(int*) m= G;
476 }
477 }
Jack Palevich88311482009-05-08 13:57:37 -0700478}
Jack Palevichae54f1f2009-05-08 14:54:15 -0700479
480int main( int argc, char** argv) {
Jack Palevichf0cbc922009-05-08 16:35:13 -0700481 pInput = stdin;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700482 if (argc-- > 1) {
483 char* file = argv[1];
484 argv += 1;
Jack Palevichf0cbc922009-05-08 16:35:13 -0700485 pInput = fopen(file, "r");
486 if (pInput == NULL) {
Jack Palevichae54f1f2009-05-08 14:54:15 -0700487 fprintf(stderr, "Could not open file \"%s\"\n", file);
488 return -1;
489 }
490 }
Jack Palevichf0cbc922009-05-08 16:35:13 -0700491 pSymbolTable = strcpy(R = calloc(1, 99999),
Jack Palevichae54f1f2009-05-08 14:54:15 -0700492 " int if else while break return for define main ") + 48;
493 v = calloc(1, 99999);
Jack Palevichd1605302009-05-08 15:26:24 -0700494 ac = calloc(1, 99999);
495 q = (int) ac;
Jack Palevichae54f1f2009-05-08 14:54:15 -0700496 P = calloc(1, 99999);
Jack Palevichf0cbc922009-05-08 16:35:13 -0700497 nextChar();
498 nextToken();
Jack Palevichae54f1f2009-05-08 14:54:15 -0700499 ab(0);
500#if 1
501 fwrite(R, 1, 99999, stdout);
502 fwrite(ac, 1, 99999, stdout);
503 fwrite(P, 1, 99999, stdout);
504 return 0;
505#else
506 return (*(int(*)()) *(int*) (P + 592))(argc, argv);
507#endif
Jack Palevich88311482009-05-08 13:57:37 -0700508}
509