1 #include <stdio.h>
2 #include <stdlib.h>
3 
4 #define print(x)	{fputs(x,stdout);}
5 
dumpBytes(FILE * f)6 void dumpBytes(FILE *f)
7 {
8   int j=0, i, k, b;
9   unsigned char buf[16];
10 
11   for(;;)
12   {
13     printf("%03X0: ",j);
14     ++j;
15 
16     for(i=0; i<16; ++i)
17     {
18       b = fgetc(f);
19       if(b == EOF)
20 	break;
21 
22       printf("%02x ", buf[i] = (unsigned char)b);
23 
24       if(i==7) putchar(' ');
25     }
26 
27     if(b == EOF)
28     {
29       for(k=i; k<16; ++k)
30       {
31 	if(k==7) putchar(' ');
32 	print("   ");
33       }
34     }
35 
36     print("   ");
37 
38     for(k=0; k<i; ++k)
39     {
40       if((buf[k] > 31) && (buf[k] < 128))
41 	putchar(buf[k]);
42       else
43 	putchar('.');
44 
45       if(k==7) putchar(' ');
46     }
47 
48     putchar('\n');
49 
50     if(b == EOF)
51       break;
52   }
53 
54   putchar('\n');
55 }
56 
main(int argc,char * argv[])57 int main(int argc, char *argv[])
58 {
59   FILE *f;
60   int i=0, c;
61 
62   if(argc<2 || !(f = fopen(argv[1], "rb")))
63   {
64     printf("Gimme a file name.\n");
65     exit(1);
66   }
67 
68   dumpBytes(f);
69 
70   return 0;
71 }
72