1 // #include <stdio.h>
2 extern int stdin, stderr, errno;
3 int d, z, C, h, P, K, ac, q, G, v, Q, R, D, L, W, M;
4
5 void w();
6 void ab(int);
7
E(int e)8 void E(int e) {
9 *(char*) D++ = e;
10 }
11
o()12 void o() {
13 if (L) {
14 h = *(char*) L++;
15 if (h == 2) {
16 L = 0;
17 h = W;
18 }
19 } else
20 h = fgetc(Q);
21 }
22
X()23 int X() {
24 return isalnum(h) | h == 95;
25 }
26
Y()27 void Y() {
28 if (h == 92) {
29 o();
30 if (h == 110)
31 h = 10;
32 }
33 }
34
ad()35 void ad() {
36 int e, j, m;
37 while (isspace(h) | h == 35) {
38 if (h == 35) {
39 o();
40 ad();
41 if (d == 536) {
42 ad();
43 E(32);
44 *(int*) d = 1;
45 *(int*) (d + 4) = D;
46 }
47 while (h != 10) {
48 E(h);
49 o();
50 }
51 E(h);
52 E(2);
53 }
54 o();
55 }
56 C = 0;
57 d = h;
58 if (X()) {
59 E(32);
60 M = D;
61 while (X()) {
62 E(h);
63 o();
64 }
65 if (isdigit(d)) {
66 z = strtol(M, 0, 0);
67 d = 2;
68 } else {
69 *(char*) D = 32;
70 d = strstr(R, M - 1) - R;
71 *(char*) D = 0;
72 d = d * 8 + 256;
73 if (d > 536) {
74 d = P + d;
75 if (*(int*) d == 1) {
76 L = *(int*) (d + 4);
77 W = h;
78 o();
79 ad();
80 }
81 }
82 }
83 } else {
84 o();
85 if (d == 39) {
86 d = 2;
87 Y();
88 z = h;
89 o();
90 o();
91 } else if (d == 47 & h == 42) {
92 o();
93 while (h) {
94 while (h != 42)
95 o();
96 o();
97 if (h == 47)
98 h = 0;
99 }
100 o();
101 ad();
102 } else {
103 e
104 = "++#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";
105 while (j = *(char*) e++) {
106 m = *(char*) e++;
107 z = 0;
108 while ((C = *(char*) e++ - 98) < 0)
109 z = z * 64 + C + 64;
110 if (j == d & (m == h | m == 64)) {
111 if (m == h) {
112 o();
113 d = 1;
114 }
115 break;
116 }
117 }
118 }
119 }
120 }
121
ae(int g)122 void ae(int g) {
123 while( g&&g!=-1) {
124 *(char*) q++=g;
125 g=g>>8;
126 }
127 }
128
A(int e)129 void A(int e) {
130 int g;
131 while( e) {
132 g=*(int*) e;
133 *(int*) e=q-e-4;
134 e=g;
135 }
136 }
137
s(int g,int e)138 int s(int g, int e) {
139 ae(g);
140 *(int*) q = e;
141 e = q;
142 q = q + 4;
143 return e;
144 }
145
H(int e)146 void H(int e) {
147 s(184,e);
148 }
149
B(int e)150 int B(int e) {
151 return s(233,e);
152 }
153
S(int j,int e)154 int S(int j, int e) {
155 ae(1032325);
156 return s(132 + j, e);
157 }
158
Z(int e)159 void Z(int e) {
160 ae( 49465);
161 H(0);
162 ae( 15);
163 ae( e+144);
164 ae( 192);
165 }
166
N(int j,int e)167 void N(int j, int e) {
168 ae(j + 131);
169 s((e > -512 && e < 512) << 7 | 5, e);
170 }
171
T(int j)172 void T (int j) {
173 int g,e,m,aa;
174 g=1;
175 if( d == 34) {
176 H(v);
177 while( h!=34) {
178 Y ();
179 *(char*) v++=h;
180 o ();
181 }
182 *(char*) v=0;
183 v=v +4&-4;
184 o ();
185 ad();
186 }
187 else {
188 aa=C;
189 m= z;
190 e=d;
191 ad();
192 if( e == 2) {
193 H(m);
194 }
195 else if( aa == 2) {
196 T(0);
197 s(185,0);
198 if( e == 33)Z(m);
199 else ae( m);
200 }
201 else if( e == 40) {
202 w ();
203 ad();
204 }
205 else if( e == 42) {
206 ad();
207 e=d;
208 ad();
209 ad();
210 if( d == 42) {
211 ad();
212 ad();
213 ad();
214 ad();
215 e=0;
216 }
217 ad();
218 T(0);
219 if( d == 61) {
220 ad();
221 ae( 80);
222 w ();
223 ae( 89);
224 ae( 392+(e == 256));
225 }
226 else if( e) {
227 if( e == 256)ae( 139);
228 else ae( 48655);
229 q++;
230 }
231 }
232 else if( e == 38) {
233 N(10,*(int*) d);
234 ad();
235 }
236 else {
237 g=*(int*) e;
238 if(!g)g=dlsym(0,M);
239 if( d == 61&j) {
240 ad();
241 w ();
242 N(6,g);
243 }
244 else if( d!= 40) {
245 N(8,g);
246 if( C == 11) {
247 N(0,g);
248 ae( z);
249 ad();
250 }
251 }
252 }
253 }
254 if( d == 40) {
255 if( g == 1)ae( 80);
256 m= s(60545,0);
257 ad();
258 j=0;
259 while( d!= 41) {
260 w ();
261 s(2393225,j);
262 if( d == 44)ad();
263 j=j +4;
264 }
265 *(int*) m= j;
266 ad();
267 if(!g) {
268 e=e +4;
269 *(int*) e=s(232,*(int*) e);
270 }
271 else if( g == 1) {
272 s(2397439,j);
273 j=j +4;
274 }
275 else {
276 s(232,g-q-5);
277 }
278 if( j)s(50305,j);
279 }
280 }
281
O(int j)282 void O (int j) {
283 int e,g,m;
284 if( j--== 1)T(1);
285 else {
286 O (j);
287 m= 0;
288 while( j == C) {
289 g=d;
290 e=z;
291 ad();
292 if( j>8) {
293 m= S(e,m);
294 O (j);
295 }
296 else {
297 ae( 80);
298 O (j);
299 ae( 89);
300 if( j == 4|j == 5) {
301 Z(e);
302 }
303 else {
304 ae( e);
305 if( g == 37)ae( 146);
306 }
307 }
308 }
309 if( m&&j>8) {
310 m= S(e,m);
311 H(e^1);
312 B(5);
313 A(m);
314 H(e);
315 }
316 }
317 }
318
w()319 void w() {
320 O(11);
321 }
322
U()323 int U() {
324 w();
325 return S(0, 0);
326 }
327
I(int j)328 void I (int j) {
329 int m,g,e;
330 if( d == 288) {
331 ad();
332 ad();
333 m= U ();
334 ad();
335 I (j);
336 if( d == 312) {
337 ad();
338 g=B(0);
339 A(m);
340 I (j);
341 A(g);
342 }
343 else {
344 A(m);
345 }
346 }
347 else if( d == 352|d == 504) {
348 e=d;
349 ad();
350 ad();
351 if( e == 352) {
352 g=q;
353 m= U ();
354 }
355 else {
356 if( d!= 59)w ();
357 ad();
358 g=q;
359 m= 0;
360 if( d!= 59)m= U ();
361 ad();
362 if( d!= 41) {
363 e=B(0);
364 w ();
365 B(g-q-5);
366 A(e);
367 g=e +4;
368 }
369 }
370 ad();
371 I(&m);
372 B(g-q-5);
373 A(m);
374 }
375 else if( d == 123) {
376 ad();
377 ab(1);
378 while( d!= 125)I (j);
379 ad();
380 }
381 else {
382 if( d == 448) {
383 ad();
384 if( d!= 59)w ();
385 K=B(K);
386 }
387 else if( d == 400) {
388 ad();
389 *(int*) j=B(*(int*) j);
390 }
391 else if( d!= 59)w ();
392 ad();
393 }
394 }
395
ab(int j)396 void ab (int j) {
397 int m;
398 while( d == 256|d!=-1&!j) {
399 if( d == 256) {
400 ad();
401 while( d!= 59) {
402 if( j) {
403 G=G +4;
404 *(int*) d=-G;
405 }
406 else {
407 *(int*) d=v;
408 v=v +4;
409 }
410 ad();
411 if( d == 44)ad() ;
412 }
413 ad();
414 }
415 else {
416 A(*(int*)(d +4));
417 *(int*) d=q;
418 ad();
419 ad();
420 m= 8;
421 while( d!= 41) {
422 *(int*) d=m;
423 m= m +4;
424 ad();
425 if( d == 44)ad();
426 }
427 ad();
428 K=G=0;
429 ae( 15042901);
430 m= s(60545,0);
431 I(0);
432 A(K);
433 ae( 50121);
434 *(int*) m= G;
435 }
436 }
437 }
438
run(int g,int e)439 int run(int g, int e) {
440 return (*(int(*)()) *(int*) (P + 592))(g, e);
441 }
442
main(int g,char ** e)443 int main(int g, char** e) {
444 int result;
445 Q = stdin;
446 if (g-- > 1) {
447 Q = fopen(e[1], "r");
448 if (!Q) {
449 fprintf(stderr, "otcc-ansi.c: could not open file %s\n", *(int*) e);
450 return -2;
451 }
452 }
453 D = strcpy(R = calloc(1, 99999), " int if else while break return for define main ") + 48;
454 v = calloc(1, 99999);
455 q = ac = calloc(1, 99999);
456 P = calloc(1, 99999);
457 o();
458 ad();
459 ab(0);
460 if (mprotect(ac & (~ 4095), (99999 + 4095) & (~ 4095), 7)) {
461 printf("Mprotect failed. %d\n", errno);
462 return -1;
463 }
464 fprintf(stderr, "otcc-ansi.c: About to execute compiled code:\n");
465 result = run(g, e);
466 fprintf(stderr, "atcc-ansi.c: result: %d\n", result);
467 return result;
468 }
469
470