/* shinobu5.c (shinobu.c) - Don Yang (uguu.org) Preprocess 5: Evaluate constants 10/11/00 */ char code[2 << 16] = "Dchar" "@p[2B<o;iB--)" "q[i]=q[i-1];" "q[o]=a;" "}" "f()" "{" "Cfor(;(c=q[o])B64B&&c0;jB--)" "{" "Bif((k=q[o])-B59)" "{" "Bif(k-B32)" "g(B59);" "Delse@" "q[o]=B59;" "Freturn+1;" "}" "q[oB++]=e[iB++];" "}" "Freturn+0;" "}" "Freturn+x(e[iB++]);" "}" "s(z*a)" "{" "Cfor(i=o=0;a[i];iB++)" "Bif(a[i]-B32)" "a[oB++]=a[i];" "a[o]=0;" "}" "t(z*a)" "{" "Cfor(i=0;i<2B<B34B&&p[i]B92B&&p[i]B10;jB++)" "Bif(q[o+j]B==B59)" "kB++;" "Bif(!k)" "{" "g(B59);" "Freturn+1;" "}" "Cfor(j=1;j1)" "{" "Cfor(i=0;(c=Ggetchar())>0;q[iB++]=c);" "q[i]=0;" "t(q);" "}" "s(p);" "s(e);" "Cfor(w=u=v=0;wu)" "{" "u=i;" "v=0;" "}" "Bif(iB==u)" "Bif(B++v>B64)" "{" "Cfor(i=0;e[iB++];);" "e[i]=u=0;" "e[i-1]=B59;" "wB++;" "}" "}" "Cfor(i=0;q[i];Gputchar(q[iB++]));" "Bif(w>B31)" "Gputchar(B63);" "Freturn+0;" "}" , template[2 << 16] = "!", string[2 << 16]; int i, j, k, o, c, d; Compress(char *source) { for(i = o = 0; source[i]; i++) if( source[i] - 32 ) source[o++] = source[i]; source[o] = 0; } FindTokenSpace() { for(; (c = string[o]) < 33 && c; o++); } WriteChar(char token) { FindTokenSpace(); string[o++] = token; } WriteToken() { if( (c = code[i]) > 64 && c < 91 ) { FindTokenSpace(); c = code[i++] - 64; for(j = c; j > 0; j--) { if( string[o] == 10 ) for(k = (2 << 16) - 1; k > o; k--) string[k] = string[k - 1]; string[o++] = code[i++]; } } else if( c - 64 ) { WriteChar(code[i++]); } else { i++; if( string[o] < 33 ) if( string[o] ) { o++; return; } string[o] = 32; } } FormatString(char *source) { for(d = 0; d < 8; d++) WriteToken(); for(d = 0; source[d];) { WriteChar(34); for(j = k = 0; string[o + j] > 10; j++) if( string[o + j] == 59 ) k++; for(j = 1; source[d] && j < k; j++) WriteChar(source[d++]); WriteChar(34); } } main(argc) { if( argc > 1 ) { for(i = 0; (c = getchar()) > 0; string[i++] = c); string[i] = 0; for(i = 0; i < 2 << 16; template[i++] = 0); for(i = j = 0; string[j]; j++) d = (c = string[j]) == 10 ? template[i] ? (template[++i] = 33) : (template[i++] = 33) : c < 33 ? ( template[i] > 34 && template[i] < 91 ) ? template[i]++ : template[i] ? (template[++i] = 35) : (template[i] = 35) : ( template[i] > 92 && template[i] < 126 ) ? template[i]++ : template[i] ? (template[++i] = 93) : (template[i] = 93); } Compress(template); Compress(code); for(o = 0; o < 2 << 16; string[o++] = 0); for(i = o = 0; template[i]; i++) if( (j = template[i]) == 33 ) string[o++] = 10; else for(k = j < 92 ? 35 : 93; k++ <= j; string[o++] = j < 92 ? 32 : 59); i = o = 0; WriteToken(); FormatString(code); FormatString(template); for(; code[i]; WriteToken()); for(i = 0; string[i]; putchar(string[i++])); }