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