#include #include int main() { int i, p = 0, q, steps, parity = 0; char op, oq; /* Decoder header */ puts("#include\n" "typedef int O;\n" "void o(O _) { putchar(_); }\n" "O main()\n" "{\n" " O *_[512], **p = _, **d, b, q;\n" " for(b = 0; b++ < 512; p = _ + q)\n" " _[q = (p - _ + 1) * 9 % 512] = (O*)p;"); /* Encode bytes */ while( (i = getchar()) != EOF ) { q = p; for(steps = 0; abs(p - q) != i; steps++) q = (q + 1) * 9 % 512; steps = 512 - steps; op = parity ? 'd' : 'p'; oq = parity ? 'p' : 'd'; printf(" o("); if( p > q ) { printf("%c - (%c=", op, oq); for(i = 0; i < steps; i++) putchar('*'); printf("(O**"); for(i = 0; i < steps; i++) putchar('*'); printf(")%c)", op); } else { printf("(%c=", oq); for(i = 0; i < steps; i++) putchar('*'); printf("(O**"); for(i = 0; i < steps; i++) putchar('*'); printf(")%c) - %c", op, op); } puts(");"); parity ^= 1; p = q; } /* Decoder footer */ puts(" return 0;\n" "}"); return 0; }