Blob
1 /*2 * upas/unesc - interpret =?foo?bar?=char?= escapes3 */5 #include <stdio.h>6 #include <stdlib.h>8 int9 hex(int c)10 {11 if('0' <= c && c <= '9')12 return c - '0';13 if('A' <= c && c <= 'F')14 return c - 'A' + 10;15 if('a' <= c && c <= 'f')16 return c - 'a' + 10;17 return 0;18 }20 int21 main(int argc, char **argv)22 {23 int c;25 while((c=getchar()) != EOF){26 if(c == '='){27 if((c=getchar()) == '?'){28 while((c=getchar()) != EOF && c != '?')29 continue;30 while((c=getchar()) != EOF && c != '?')31 continue;32 while((c=getchar()) != EOF && c != '?'){33 if(c == '='){34 c = hex(getchar()) << 4;35 c |= hex(getchar());36 }37 putchar(c);38 }39 (void) getchar(); /* consume '=' */40 }else{41 putchar('=');42 putchar(c);43 }44 }else45 putchar(c);46 }47 exit(0);48 }