/* * upas/unesc - interpret =?foo?bar?=char?= escapes */ #include #include int hex(int c) { if('0' <= c && c <= '9') return c - '0'; if('A' <= c && c <= 'F') return c - 'A' + 10; if('a' <= c && c <= 'f') return c - 'a' + 10; return 0; } void main(int argc, char **argv) { int c; while((c=getchar()) != EOF){ if(c == '='){ if((c=getchar()) == '?'){ while((c=getchar()) != EOF && c != '?') continue; while((c=getchar()) != EOF && c != '?') continue; while((c=getchar()) != EOF && c != '?'){ if(c == '='){ c = hex(getchar()) << 4; c |= hex(getchar()); } putchar(c); } (void) getchar(); /* consume '=' */ }else{ putchar('='); putchar(c); } }else putchar(c); } exit(0); }