int
xtoi(int c)
{
if (c >= '0' && c <= '9')
return c - '0';
if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
return -1;
}
int
d(FILE *fp)
{
int c, c1, c2;
c = fgetc(fp);
while (c != EOF) {
if (c == '+') {
putchar(' ');
goto l;
}
if (c == '%') {
c1 = fgetc(fp);
if (isxdigit(c1) == 0)
return 1;
c2 = fgetc(fp);
if (isxdigit(c2) == 0)
return 1;
printf("%c", xtoi(c1) * 16 + xtoi(c2));
goto l;
}
putchar(c);
l:
c = fgetc(fp);
}
if (ferror(fp) != 0) {
perror(argv0);
return 1;
}
return 0;
}
int
main(int argc, char *argv[])
{
FILE *fp;
int i;
argv0 = argv[0];
if (argc == 1) return d(stdin);
for (i = 1; i < argc; i++) {
fp = fopen(argv[i], "r");
if (!fp) {
perror(argv[0]);
return 1;
}