| /* |
| * upas/unesc - interpret =?foo?bar?=char?= escapes |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| 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; |
| } |
| |
| int |
| 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); |
| } |