#include #include typedef unsigned char uchr; main(ac, av) int ac; char **av; { int c, c1, c2; int sjis, kmode, knj1; FILE *infp, *outfp; if (ac != 3) { printf("pp infile outfile\n"); exit(1); } if ((infp = fopen(av[1], "r")) == NULL) { printf("Can't open infile %s\n", av[1]); exit(1); } if ((outfp = fopen(av[2], "w")) == NULL) { printf("Can't open outfile %s\n", av[2]); exit(1); } sjis = 0; while ((c = getc(infp)) != EOF) { if (c >= 0x81 && c <= 0x9f) sjis = 1; } clearerr(infp); rewind(infp); kmode = 0; knj1 = 0; while ((c = getc(infp)) != EOF) { if (knj1 != 0) { if (!sjis) { knj1 &= 0x7f; c &= 0x7f; if ((knj1 & 0x01) == 0) { c += 0x7e; } else { c += 0x1f; if (c > 0x7e) c++; } knj1 = (knj1 + 0xe1) >> 1; if (knj1 > 0x9f) knj1 += 0x40; } fprintf(outfp, "\\%03o\\%03o", knj1, c); knj1 = 0; continue; } if (c == '\033') { c1 = getc(infp); c2 = getc(infp); if (c1 == '$' && (c2 == '@' || c2 == 'B')) kmode = 1; else if (c1 == '(' && (c2 == 'J' || c2 == 'B')) kmode = 0; continue; } if ((c & 0x80) || kmode == 1) { knj1 = c; continue; } if (c == '\r') continue; putc(c, outfp); } fclose(infp); fclose(outfp); exit(0); }