#ifndef e #include #include #include static int vertical_mode = 0; static int _ = 0 #define e 1 #include __FILE__ ; #undef e #define e(c) if( (_ != __LINE__ ? (_ = __LINE__) : 0) ) { c; } typedef struct { int d, b, o, P; char *q, *p; } f; int p, q, d, b, O, i = 0; char *o[] = { "\n A", "$bbca#b#ccabb%caa", "$bbca", NULL }; int main(int I, char **l) { f *P; FILE *t; if( 200 < (O = _) ) { b = 1; for(p = b, q = 0; o[p];) { d = o[p][q] > 96; i = o[p][q] - (d ? 96 : 32); q++; if( !o[p][q] ) { p += b; q = 0; } for(; i > 0; i--) { putchar(o[0][o[p][q] - 97]); if( d ) { q++; if( o[p] && !o[p][q] ) { p += b; q = 0; } } } if( !d ) q++; if( o[p] && !o[p][q] ) { p += b; q = 0; } if( !o[p] && O > 0 ) { p -= b; O--; } } return 0; } if( !(P = (f*)calloc(sizeof(f), I)) ) return !puts("Out of memory"); for(p = 1; p < I; p++) { for(q = 1; q < p; q++) { if( !strcmp(l[p], l[q]) ) { memcpy(&P[p], &P[q], sizeof(f)); break; } } if( q < p ) continue; if( strcmp(l[p], "-") ) { if( !(t = fopen(l[p], "rb")) ) return printf("Can not open %s\n", l[p]); } else { t = stdin; } b = 1 << 16; do { P[p].P += b; if( !(P[p].q = realloc(P[p].q, P[p].P + 1)) ) return !puts("Out of memory"); O = fread(P[p].q + P[p].o, 1, b, t); P[p].o += O; } while( O == b ); P[p].q[P[p].o] = 10; P[p].p = P[p].q; fclose(t); for(d = 0; d < P[p].o; d = q + 1) { for(q = d; q < P[p].o && P[p].q[q] - 10; q++); b = q - d; if( b > P[p].d ) P[p].d = b; P[p].b++; } } for(p = 1; p < I; p++) { if( P[p].b > i ) i = P[p].b; } p = 0; if( !vertical_mode ) { for(; p < i; p++) { for(q = 1; q < I; q++) { b = 0; if( P[q].p - P[q].q < P[q].o ) { while( *(P[q].p) - 10 ) { putchar(*(P[q].p)); b++; P[q].p++; } P[q].p++; } for(; b < P[q].d; b++) putchar(32); } putchar(10); } } if( p == 0 ) { for(p = 1; p < I; p++) fwrite(P[p].q, P[p].o, 1, stdout); } return 0; } #elif e | __LINE__ #endif