/* ファイルダンププログラム */
#include <stdio.h>
#include <ctype.h>

#define W 16	/* 16桁ずつ表示する */

int main(int argc, char *argv[])
{
	FILE *fp;
	int n, i;
	long offset = 0;
	unsigned char buf[W];

	if (argc < 2) {
		printf("ファイル名を指定してください。\n");
		return 0;
	}
	if ((fp = fopen(argv[1], "rb")) == NULL) {
		printf("ファイルオープンエラーです。\n");
		return 1;
	}
	while ((n = fread(buf, 1, W, fp)) > 0) {
		printf("%08lX: ", offset);
		for (i = 0; i < n; i++) {
			printf("%02X ", buf[i]);
		}
		if (n < W) {
			for (i = n; i < W; i++) {
				printf("   ");
			}
		}
		for (i = 0; i < n; i++) {
			if (isprint(buf[i])) {
				putchar(buf[i]);
			}
			else {
				putchar('.');
			}
		}
		putchar('\n');
		offset += W;
	}
	putchar('\n');

	fclose(fp);

	return 0;
}
