#include #include #include char *argv0; int e(FILE *fp) { int c; c = fgetc(fp); for (;;) { if (c == EOF) break; if (c == '\n') { c = fgetc(fp); if (c == EOF) { putchar('\n'); break; } if (ungetc(c, fp) == EOF) { perror(argv0); return 1; } c = '\n'; } if (isalnum(c) || c == '-' | c == '.' | c == '_' | c == '~') { putchar(c); goto l; } printf("%%%02X", 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 e(stdin); for (i = 1; i < argc; i++) { fp = fopen(argv[i], "r"); if (!fp) { perror(argv[0]); return 1; } e(fp); } }