/* hdump.c -- Filter for Hexadecimal Dump (ascii) */ #include #include int main(int argc, char *argv[]) { int keof=0, n=0, i, j, c, c1, c2, m[16]; FILE *fp; if (argc == 1) fp = stdin; else if ((fp=fopen(argv[1],"r")) == NULL) { fprintf(stderr, "file %s not found\n", argv[1]); exit(1); } while (1) { for (i=0; i<16; i++) { if ((m[i]=getc(fp)) == EOF) { keof=1; break; } } if (keof) break; printf("%03X0 ",n++); for (j=0; j<16; j++) { c = m[j]; c1 = ((c>>4) | 0x30); if (c1 > 0x39) c1 = c1+7; c2 = ((c&15) | 0x30); if (c2 > 0x39) c2 = c2+7; putchar(c1); putchar(c2); putchar(' '); if ((j==7) || (j==15)) putchar(' '); } putchar('-'); for (j=0; j<16; j++) { c = m[j]; if ((c<0x20) || (c==0x7f)) putchar('.'); else if (c<0x80) putchar(c); else if ((c<0xa0) || (c>=0xe0)) putchar(':'); else putchar('_'); } putchar('-'); putchar('\n'); if ((n%16) == 0) putchar('\n'); } if (i > 0) { printf("%03X0 ",n); for (j=0; j<16; j++) { if (j < i) { c = m[j]; c1 = ((c>>4) | 0x30); if (c1>0x39) c1 = c1+7; c2 = ((c&15) | 0x30); if (c2>0x39) c2 = c2+7; putchar(c1); putchar(c2); putchar(' '); } else { putchar(' '); putchar(' '); putchar(' '); } if((j==7) || (j==15)) putchar(' '); } putchar('-'); for (j=0; j<16; j++) { if (j < i) c = m[j]; else c = ' '; if ((c<0x20) || (c==0x7f)) putchar('.'); else if (c<0x80) putchar(c); else if ((c<0xa0) || (c>=0xe0)) putchar(':'); else putchar('_'); } putchar('-'); putchar('\n'); } if (fp != stdin) fclose(fp); return(0); }