Home | History | Annotate | Download | only in src
      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 
      8 void E(int e) {
      9     *(char*) D++ = e;
     10 }
     11 
     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 
     23 int X() {
     24     return isalnum(h) | h == 95;
     25 }
     26 
     27 void Y() {
     28     if (h == 92) {
     29         o();
     30         if (h == 110)
     31             h = 10;
     32     }
     33 }
     34 
     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 
    122 void ae(int g) {
    123     while( g&&g!=-1) {
    124         *(char*) q++=g;
    125         g=g>>8;
    126     }
    127 }
    128 
    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 
    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 
    146 void H(int e) {
    147     s(184,e);
    148 }
    149 
    150 int B(int e) {
    151     return s(233,e);
    152 }
    153 
    154 int S(int j, int e) {
    155     ae(1032325);
    156     return s(132 + j, e);
    157 }
    158 
    159 void Z(int e) {
    160     ae( 49465);
    161     H(0);
    162     ae( 15);
    163     ae( e+144);
    164     ae( 192);
    165 }
    166 
    167 void N(int j, int e) {
    168     ae(j + 131);
    169     s((e > -512 && e < 512) << 7 | 5, e);
    170 }
    171 
    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 
    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 
    319 void w() {
    320     O(11);
    321 }
    322 
    323 int U() {
    324     w();
    325     return S(0, 0);
    326 }
    327 
    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 
    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 
    439 int run(int g, int e) {
    440     return (*(int(*)()) *(int*) (P + 592))(g, e);
    441 }
    442 
    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