Blob


1 /*
2 * upas/unesc - interpret =?foo?bar?=char?= escapes
3 */
5 #include <stdio.h>
6 #include <stdlib.h>
8 int
9 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 int
21 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 }else
45 putchar(c);
46 }
47 exit(0);
48 }