/* See LICENSE file for copyright and license details. */ #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include "util.h" static void dostrings(FILE *fp, const char *fname); static void usage(void) { eprintf("usage: %s file...\n", argv0); } int main(int argc, char *argv[]) { FILE *fp; ARGBEGIN { default: usage(); } ARGEND; if (argc == 0) { dostrings(stdin, "<stdin>"); } else { for (; argc > 0; argc--, argv++) { if (!(fp = fopen(argv[0], "r"))) { weprintf("fopen %s:", argv[0]); continue; } dostrings(fp, argv[0]); fclose(fp); } } return 0; } static void dostrings(FILE *fp, const char *fname) { unsigned char buf[BUFSIZ]; int c, i = 0; off_t offset = 0; do { offset++; if (isprint(c = getc(fp))) buf[i++] = c; if ((!isprint(c) && i >= 6) || i == sizeof(buf) - 1) { buf[i] = '\0'; printf("%8ld: %s\n", (long)offset - i - 1, buf); i = 0; } } while (c != EOF); if (ferror(fp)) eprintf("%s: read error:", fname); }