/* dump files in hex */

#include <stdio.h>

void cprint(char c);
void xdisp(char *buf, int len);

main(int argc, char *argv[])
{
	FILE *fp;
	int n;
	char	buf[20];

	if(argc != 2 && argc != 1) {
		printf("usage: %s file\n", argv[0]);
		exit(1);
	}
	if(argc == 1) {
		fp = stdin;
	} else if((fp = fopen(argv[1], "r")) == NULL) {
		perror(argv[1]);
		exit(1);
	}
	while(!feof(fp)) {
		n = fread(buf, 1, 16, fp);
		xdisp(buf, n);
	}
	fclose(fp);
}

void
xdisp(char *buf, int len)
{
	char *cp;
	int n;
	static long ptr;

	printf("%06lx  ", ptr);
	ptr += len;
	for(n = 0; n < 16; n++) {
		if(n < len)
			printf("%02x ", buf[n] & 0xff);
		else	printf("   ");
		if(n == 7)
			printf(" ");
	}
	printf("  ");
	for(n = 0; n < len; n++)
		cprint(buf[n]);
	printf("\n");

}

void
cprint(char c)	/* print c if ascii, else print '.' */
{
	if( c >= ' ' && c < 0x7f )
		putchar(c);
	else
		putchar('.');
}
