/* shindou10.c - Don Yang (uguu.org) 02/19/07 */ #include #include #include #ifdef _WIN32 #include #include #endif FILE *a; unsigned char *p, *b, *q = " \0!\0 \xef\xbc\x81I\1\xff\1\xa1\xaa"; int N,E,K,O,n,e,k,o,s,f,t,w,r, Z = 0xe38081, Y = 0xe3827f, W = 0xefbc81, V = 0xefbda1, j = 12289, U = 33089, T = 33438, S = 41378, l = 65281, d = 128, c = 160, u = 192, v = 224, x = 240, y = 248, z = 255; #define X(_) }else if(_){ #define Q(_, _q) \ fwrite(_, _q, 1, stdout); #define F(_) static void _(void) F(H) { if( n - O ) { n += fread(b + n, 1, O - n, a); X(1) p = b; b = malloc((O *= 2) + 3); memcpy(b, p, n); free(p); } } F(A) { r = (r << 8) | b[N++]; } F(ba) { r = 0; A(); A(); } F(ab) { r = b[N] | (b[N + 1] << 8); N += 2; } F(B) { r = 0; if( (b[N] & v) - u ) { if( (b[N] & x) - v ) { if( (b[N] & y) - x ) { A(); X( (b[N + 1] & u) - d || (b[N + 2] & u) - d || (b[N + 2] & u) - d ) r--; X(1) A(); A(); A(); A(); } X( (b[N + 1] & u) - d || (b[N + 2] & u) - d ) r--; X(1) A(); A(); A(); } X( (b[N + 1] & u) - d ) r--; X(1) A(); A(); } } F(C) { r = 0; if( (b[N] > d && b[N] < c) || (b[N] >= v && b[N] < x) ) { if( b[N + 1] < 64 || b[N + 1] > z-3 ) { r--; X(1) A(); A(); } X(1) A(); } } F(D) { r = 0; if( (b[N] > c && b[N] < c+9) || b[N] == 173 || (b[N] > 175 && b[N] < x+5) || (b[N] > z-7 && b[N] < z-2) || b[N] == 142 ) /* patch for EUC-JIS-2004 */ { if( b[N + 1] <= c || b[N + 1] >= z ) { r--; X(1) A(); A(); } X( b[N] == 143 ) /* patch for EUC-JIS-2004 */ if( b[N + 1] <= c || b[N + 1] >= z || b[N + 2] <= c || b[N + 2] >= z ) { r--; X(1) A(); A(); A(); } X(1) A(); } } F(G) { n = e = k = o = 0; for(f = 28; !feof(a) && f & (f - 1);) { H(); if( !(f & 3) ) { if( *b - z || b[1] + 1 - z ) { if( *b + 1 - z || b[1] - z ) { for(N = 0; N < n - 1; N += 2) if( b[N] == 10 && !b[N + 1] ) { f = 1; goto finalize; X( !b[N] && b[N + 1] == 10 ) f = 2; goto finalize; } if( b[0] + 1 - x || b[1] + 5 - u || b[2] + 1 - u ) { for(N = 0; N < n - 3 && f & 4;) { B(); if( r < 0 ) { f &= ~4; X( (r > Z+z && r < Y-u+1) || (r > Y && r < Y+21) ) e++; } } for(N = 0; N < n - 1 && f & 8;) { C(); if( r < 0 ) { f &= ~8; X( r > T && r < T+84 ) k++; } } for(N = 0; N < n - 1 && f & 16;) { D(); if( r < 0 ) { f &= ~16; X( r > 42144 && r < 42228 ) o++; } } X(1) f = 4; } X(1) f = 2; } X(1) f = 1; } } } finalize: if( !(f & 3) ) { if( !(f & 4) ) e = -1; if( !(f & 8) ) k = -1; if( !(f & 16) ) o = -1; f = e < k ? k < o ? 16 : 8 : e < o ? 16 : f & 4 ? 4 : 8; } } #define I \ (r > 96 && r < d-5) || \ (r > 64 && r < 91) || \ (r > 47 && r < 58) || \ r == 45 || r == 95 || \ r == 32 || r == 9 #define J \ r == 33 || \ (f & 3 && r == l) || \ (f & 4 && r == W) || \ (f & 8 && r == U+8) || \ (f & 16 && r == S+8) #define L \ r == 46 || r == 63 || \ (f & 3 && \ (r == l+30 || r == l+13 || r == j+1 || \ r == l+96)) || \ (f & 4 && \ (r == W+30 || r == W+13 || r == Z+1 || \ r == V)) || \ (f & 8 && \ (r == U+7 || r == U+3 || r == U+1)) || \ (f & 16 && \ (r == S+7 || r == S+3 || r == S+1)) || \ J #define M \ r == 44 || r == 10 || \ (f & 3 && \ (r == l+11 || r == j || r == l+99)) || \ (f & 4 && \ (r == W+11 || r == Z || r == V+3)) || \ (f & 8 && \ (r == U+2 || r == U)) || \ (f & 16 && \ (r == S+2 || r == S)) || \ L F(P) { b[t] -= b[t] > 96 && b[t] < d-5 ? 32 : 0; t++; } F(bb) { for(t = E; t < N; t++) P(); } F(aa) { E++; bb(); E--; } F(R) { for(t = E; t < N;) if( (b[t] & y) - x ) { if( (b[t] & x) - v ) { if( (b[t] & v) - u ) { P(); X(1) t += 2; } X(1) t += 3; } X(1) t += 4; } } F(m) { for(t = E; t < N;) if( (b[t] > d && b[N] < c) || (b[t] >= v && b[N] < x) ) { t++; X(1) P(); } } F(i) { Q(q + (r > z ? f & 1 ? 9 : f & 2 ? 10 : f & 4 ? 5 : f & 8 ? 7 : 12 : f & 2 ? 1 : 2), (r > z ? f & 4 ? 3 : 2 : f & 3 ? 2 : 1)) } F(h) { for(; E < s; E += t) { Q(b + E, t = ( f & 3 ? 2 : f & 4 ? (b[E] & y) - x ? (b[E] & x) - v ? (b[E] & v) - u ? 1 : 2 : 3 : 4 /* patch for SJIS half width kana*/ : b[E] >= d && !(f&8 && b[E]>c && b[E]= d ) \ { \ K = 2; \ X( I ) \ K = 1; \ X(1) \ Q(b + s, N - s) \ } \ E = s; \ X(1) \ if( M || \ (K - 1 && (I)) || \ (K - 2 && !(I)) ) \ { \ if( L ) \ { \ if( K - 1 ) \ { \ h(); \ X(1) \ n_(); \ } \ } \ if( E - s ) \ Q(b + E, s - E) \ if( J ) \ { \ i(); \ i(); \ X( (M) && r - 10 ) \ i(); \ X(1) \ Q(b + s, N - s) \ } \ K = 0; \ } \ } \ } int main(int _l, char **_) { #ifdef _WIN32 setmode(fileno(stdin), O_BINARY); setmode(fileno(stdout), O_BINARY); #endif O = 4096; b = malloc(O); if( _l > 1 ) { for(w = 1; w < _l; w++) { Q(_[w], strlen(_[w])) Q(": ", 2) if( (a = fopen(_[w], "rb")) ) { G(); p = f - 1 ? f - 2 ? f - 4 ? f - 8 ? "EUC-JP" : "Shift_JIS" : "UTF-8" : "UCS-2BE" : "UCS-2LE"; fclose(a); X(1) p = "can not open file"; } puts(p); } X(1) a = stdin; G(); if( f & 3 ) { if( f & 1 ) { g(ab, bb) X(1) g(ba, aa) } X( f & 4 ) g(B, R) X(1) if( f & 8 ) { g(C, m) X(1) g(D, m) } } } free(b); return 0; }