/* unquote_printable.c -- convert =XX to 8 bit chars */ /* $Id$ */ /* Carlos Duarte, 990207/990324 */ #include #include #include static int do_args(int first, int ac, char *av[]); #define ARG() \ s[1] ? (t=s+1, s+=strlen(s)-1, t) : ++i hex(XX) * =\n -> "" (empty) */ for (;;) { int c, c1, c2; c = getc(f); check: if (c == EOF) break; if (c != '=') { putchar(c); continue; } c1 = getc(f); c2 = getc(f); if (c1 == EOF) { /* =EOF */ putchar('='); break; } if (c1 == '\n') { c = c2; /* =\n ? */ goto check; } if (c2 == EOF) { /* =X EOF */ putchar('='); putchar(c1); break; } if (ishex(c1) && ishex(c2)) { /* =HH */ int v = _ishex[c1]*16 + _ishex[c2]; putchar(v); continue; } /* =?? */ if (c1 != EOF) putchar(c1); if (c2 != EOF) putchar(c2); } if (f != stdin) fclose(f); } static int do_args(int ix, int argc, char *argv[]) { if (ix == argc) { unquote(0); } else { for (; ix