• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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