/* filespy.c This program reads any file in binary and prints out 16 bytes at a time in both hex and ascii. Public Domain; by Howard L. Dyckman Version of 1990NOV15, works with stdio. */ #include main(argc, argv) int argc; char *argv[]; { int f; #define BUFSIZE 16 unsigned char buffer[BUFSIZE]; char *str; int i, j; int loc; int size; char c; char goodchar(); if (argc == 1) f = 0; /* stdin */ else if (argc != 2) { fprintf(stderr, "Usage: filespy file\n"); exit(1); }; if (argc == 2) { if ((f = open(argv[1], 0)) == -1) { perror(argv[1]); exit(1); }; }; loc = 0; do { size = read(f, buffer, BUFSIZE); if (size != 16) { for (i = size; i < 16; i++) buffer [i] = 0; }; if (size == 0) exit (1); printf ("%6x (%6d) ", loc, loc); for (i = 0; i < 16; i++) { if (i < size) printf ("%2x",buffer [i]); else printf (" "); if (i % 2 == 1) printf (" "); } printf (" "); for (j = 0; j < 16; j++) { c = goodchar (buffer [j]); if (j < size) printf ("%1c", c); else printf (" "); }; /* if (size != 16) printf ("\n**%2d**", size); */ printf ("\n"); loc += size; } while (size == 16); exit (1); } char goodchar (ch) char ch; { char thec = ' '; /* Print space for unprintables */ if (32 <= (int) ch && (int) ch <= 126) thec = ch; if (ch == 10) thec = 36; /* Print $ for newline */ return (thec); } /* NAME = filespy OFILES = filespy.o CFILES = filespy.c CFLAGS = -g LDFLAGS = -lm $(NAME): $(OFILES) cc $(CFLAGS) $(OFILES) -o $(NAME) $(LDFLAGS) */