/* accentuate.c * * Written by Keith Pomakis on September 27, 1995. * * Usage: accentuate [-quiet] [ []] */ #include FILE *open_file(char *name, char *mode); void convert(FILE *infile, FILE *outfile, int quiet); char translate(unsigned int code); int main(int argc, char *argv[]) { FILE *in, *out; int quiet, success; int c; if (argc > 1 && strncmp(argv[1], "-h", 2) == 0) { printf("Usage: %s [-quiet] [ []]\n", argv[0]); exit(0); } if (argc > 1 && strncmp(argv[1], "-q", 2) == 0) quiet = 1; else quiet = 0; /* Set up input and output streams */ switch(argc - quiet) { case 1: in = stdin; out = stdout; break; case 2: in = open_file(argv[1+quiet], "rb"); out = stdout; break; case 3: in = open_file(argv[1+quiet], "rb"); out = open_file(argv[2+quiet], "wb"); break; default: fprintf(stderr, "Usage: %s [-quiet][ []]\n", argv[0]); exit(1); break; } do { c = getc(in); if (c != EOF) if (c == '\\') convert(in, out, quiet); else putc(c, out); } while (c != EOF); exit(0); } FILE * open_file(char *name, char *mode) { FILE *file = fopen(name, mode); if (!file) { fprintf(stderr, "Error opening file \042%s\042.\n", name); exit(1); } return file; } void convert(FILE *infile, FILE *outfile, int quiet) { unsigned int code1, code2; unsigned char newc, temp; int i, num_read, valid = 1; code1 = getc(infile); if (code1 == EOF) { if (!quiet) fprintf(stderr, "Unrecognized sequence: \042\\\042" " not converted.\n"); putc('\\', outfile); return; } else if (code1 == '\\') { putc('\\', outfile); return; } code2 = getc(infile); if (code2 == EOF) { if (!quiet) fprintf(stderr, "Unrecognized sequence: \042\\%c\042" " not converted.\n", code1); fprintf(outfile, "\\%c", code1); return; } newc = translate((code1 << 8) | code2); if (!newc) { newc = translate((code2 << 8) | code1); if (!newc) { if (!quiet) fprintf(stderr, "Unrecognized sequence: \042\\%c%c\042" " not converted.\n", code1, code2); fprintf(outfile, "\\%c%c", code1, code2); } else putc(newc, outfile); } else putc(newc, outfile); return; } char translate(unsigned int code) { char newc = '\0'; switch (code) { case 0x2020: newc = 0xa0; break; /* _req space_ */ case 0x2121: newc = 0xa1; break; /* !! _!_invertd_ */ case 0x432f: newc = 0xa2; break; /* C/ ___cent____ */ case 0x437c: newc = 0xa2; break; /* C| ___cent____ */ case 0x4c2d: newc = 0xa3; break; /* L- ___pound___ */ case 0x4c3d: newc = 0xa3; break; /* L= ___pound___ */ case 0x584f: newc = 0xa4; break; /* XO __currency_ */ case 0x5830: newc = 0xa4; break; /* X0 __currency_ */ case 0x592d: newc = 0xa5; break; /* Y- ____yen____ */ case 0x5920: newc = 0xa5; break; /* Y ____yen____ */ case 0x7c7c: newc = 0xa6; break; /* || _|_broken__ */ case 0x534f: newc = 0xa7; break; /* SO __section__ */ case 0x5321: newc = 0xa7; break; /* S! __section__ */ case 0x5330: newc = 0xa7; break; /* S0 __section__ */ case 0x2222: newc = 0xa8; break; /* "" __umulaut__ */ case 0x434f: newc = 0xa9; break; /* CO _copyright_ */ case 0x4330: newc = 0xa9; break; /* C0 _copyright_ */ case 0x415f: newc = 0xaa; break; /* A_ __fem_ord__ */ case 0x3c3c: newc = 0xab; break; /* << _l_ang_quo_ */ case 0x7e7e: newc = 0xac; break; /* ~~ ____not____ */ case 0x2d2d: newc = 0xad; break; /* -- _syl_hyphn_ */ case 0x524f: newc = 0xae; break; /* RO _registerd_ */ case 0x5230: newc = 0xae; break; /* R0 _registerd_ */ case 0x5f5f: newc = 0xaf; break; /* __ _overline__ */ case 0x305e: newc = 0xb0; break; /* 0^ __degrees__ */ case 0x2b2d: newc = 0xb1; break; /* +- ____+/-____ */ case 0x325e: newc = 0xb2; break; /* 2^ _2_supersc_ */ case 0x335e: newc = 0xb3; break; /* 3^ _3_supersc_ */ case 0x2727: newc = 0xb4; break; /* '' ___acute___ */ case 0x2f55: newc = 0xb5; break; /* /U ____mu_____ */ case 0x5021: newc = 0xb6; break; /* P! _paragraph_ */ case 0x2e5e: newc = 0xb7; break; /* .^ __mid_dot__ */ case 0x2c2c: newc = 0xb8; break; /* ,, __cedilla__ */ case 0x315e: newc = 0xb9; break; /* 1^ _1_supersc_ */ case 0x305f: newc = 0xba; break; /* 0_ __mas_ord__ */ case 0x3e3e: newc = 0xbb; break; /* >> _r_ang_quo_ */ case 0x3134: newc = 0xbc; break; /* 14 ____1/4____ */ case 0x3132: newc = 0xbd; break; /* 12 ____1/2____ */ case 0x3334: newc = 0xbe; break; /* 34 ____3/4____ */ case 0x3f3f: newc = 0xbf; break; /* ?? _?_invertd_ */ case 0x6041: newc = 0xc0; break; /* `A _`A_grave__ */ case 0x2741: newc = 0xc1; break; /* 'A _'A_acute__ */ case 0x5e41: newc = 0xc2; break; /* ^A _^A_circum_ */ case 0x7e41: newc = 0xc3; break; /* ~A _~A_tilde__ */ case 0x2241: newc = 0xc4; break; /* "A _"A_dieres_ */ case 0x2a41: newc = 0xc5; break; /* *A _*A_ring___ */ case 0x4145: newc = 0xc6; break; /* AE _AE________ */ case 0x432c: newc = 0xc7; break; /* C, _,C_cedilla */ case 0x6045: newc = 0xc8; break; /* `E _`E_grave__ */ case 0x2745: newc = 0xc9; break; /* 'E _'E_acute__ */ case 0x5e45: newc = 0xca; break; /* ^E _^E_circum_ */ case 0x2245: newc = 0xcb; break; /* "E _"E_dieres_ */ case 0x6049: newc = 0xcc; break; /* `I _`I_grave__ */ case 0x2749: newc = 0xcd; break; /* 'I _'I_acute__ */ case 0x5e49: newc = 0xce; break; /* ^I _^I_circum_ */ case 0x2249: newc = 0xcf; break; /* "I _"I_dieres_ */ case 0x442d: newc = 0xd0; break; /* D- _D-_Eth_lr_ */ case 0x7e4e: newc = 0xd1; break; /* ~N _~N_tilde__ */ case 0x604f: newc = 0xd2; break; /* `O _`O_grave__ */ case 0x274f: newc = 0xd3; break; /* 'O _'O_acute__ */ case 0x5e4f: newc = 0xd4; break; /* ^O _^O_circum_ */ case 0x7e4f: newc = 0xd5; break; /* ~O _~O_tilde__ */ case 0x224f: newc = 0xd6; break; /* "O _"O_dieres_ */ case 0x2a2a: newc = 0xd7; break; /* ** __multiply_ */ case 0x4f2f: newc = 0xd8; break; /* O/ _/O_slash__ */ case 0x6055: newc = 0xd9; break; /* `U _`U_grave__ */ case 0x2755: newc = 0xda; break; /* 'U _'U_acute__ */ case 0x5e55: newc = 0xdb; break; /* ^U _^U_circum_ */ case 0x2255: newc = 0xdc; break; /* "U _"U_dieres_ */ case 0x2759: newc = 0xdd; break; /* 'Y _'Y_acute__ */ case 0x5050: newc = 0xde; break; /* PP _cap_thorn_ */ case 0x7373: newc = 0xdf; break; /* ss _Es-sed_B__ */ case 0x6061: newc = 0xe0; break; /* `a _`a_grave__ */ case 0x2761: newc = 0xe1; break; /* 'a _'a_acute__ */ case 0x5e61: newc = 0xe2; break; /* ^a _^a_circum_ */ case 0x7e61: newc = 0xe3; break; /* ~a _~a_tilde__ */ case 0x2261: newc = 0xe4; break; /* "a _"a_dieres_ */ case 0x2a61: newc = 0xe5; break; /* *a _*a_ring___ */ case 0x6165: newc = 0xe6; break; /* ae _ae________ */ case 0x632c: newc = 0xe7; break; /* c, _,c_cedilla */ case 0x6065: newc = 0xe8; break; /* `e _`e_grave__ */ case 0x2765: newc = 0xe9; break; /* 'e _'e_acute__ */ case 0x5e65: newc = 0xea; break; /* ^e _^e_circum_ */ case 0x2265: newc = 0xeb; break; /* "e _"e_dieres_ */ case 0x6069: newc = 0xec; break; /* `i _`i_grave__ */ case 0x2769: newc = 0xed; break; /* 'i _'i_acute__ */ case 0x5e69: newc = 0xee; break; /* ^i _^i_circum_ */ case 0x2269: newc = 0xef; break; /* "i _"i_dieres_ */ case 0x256f: newc = 0xf0; break; /* %o _o^x_Eth_s_ */ case 0x7e6e: newc = 0xf1; break; /* ~n _~n_tilda__ */ case 0x606f: newc = 0xf2; break; /* `o _`o_grave__ */ case 0x276f: newc = 0xf3; break; /* 'o _'o_acute__ */ case 0x5e6f: newc = 0xf4; break; /* ^o _^o_circum_ */ case 0x7e6f: newc = 0xf5; break; /* ~o _~o_tilde__ */ case 0x226f: newc = 0xf6; break; /* "o _"o_dieres_ */ case 0x2f2f: newc = 0xf7; break; /* // __divide___ */ case 0x6f2f: newc = 0xf8; break; /* o/ _/o_slash__ */ case 0x6075: newc = 0xf9; break; /* `u _`u_grave__ */ case 0x2775: newc = 0xfa; break; /* 'u _'u_acute__ */ case 0x5e75: newc = 0xfb; break; /* ^u _^u_circum_ */ case 0x2275: newc = 0xfc; break; /* "u _"u_dieres_ */ case 0x2779: newc = 0xfd; break; /* 'y _'y_acute__ */ case 0x7070: newc = 0xfe; break; /* pp _sm_thorn__ */ case 0x2279: newc = 0xff; break; /* "y _"y_dieres_ */ default: newc = 0; } return newc; }