/* DecRead similar to HexRead but outputs in decimal */

#include <ctype.h>
#include <stdio.h>

char *VERSION			= "\0$VER:DecRead 1.0 (15.10.95) T.Collier";

FILE *fp;

void brk(void);
void printbuf(int c, int buffer[]);

void main(int ac, char *av[])
{
	char bold_on[]  = {27,"[1m"};
	char bold_off[] = {27,"[22m"};
	char ital_on[]  = {27,"[3m"};
	char ital_off[] = {27,"[23m"};
	int  buf[12];
	int  count1, count2, chr, bytecount = 0;

	onbreak(brk);
	if(ac == 1)
	{
		printf("\n%s Must%s supply a %sPATH/FILENAME%s\n\n",
					bold_on, bold_off, bold_on, bold_off);
		exit(1);
	}
	
	if(*av[1] == '?')
	{
		printf("\n%s%s Usage--%s%s %sDecRead PATH/FILENAME%s",
					bold_on, ital_on, bold_off, ital_off, bold_on, bold_off);
		printf("\n       © T.Collier 1995.\n\n");
		exit(0);
	}

	fp = fopen(av[1], "r");
	if(fp == NULL)
	{
		printf("\n Could %sNOT%s Open file: %s%s%s\n\n",
					bold_on, bold_off, bold_on, av[1], bold_off);
		exit(1);
	}
	
	for(;;)
	{
		printf("%08d:  ",bytecount);
		for(count1 = 0; count1 < 12; count1++)
		{
			if((chr = getc(fp)) == EOF)
			{
				for(count2 = 0; count2 < (12-count1); count2++)
					printf("    ");

				printbuf(count1, buf);
				fclose(fp);
				exit(0);
			}
			buf[count1] = chr;
			printf("%03d ",chr);
		}
		printbuf(12, buf);
		bytecount += 12;
	}
	exit(0);
}

void printbuf(int c, int buffer[])
{
	int loopcount;
	
	printf(" ");
	for(loopcount = 0; loopcount < c; loopcount++)
	{
		if(isprint(buffer[loopcount]))
			printf("%c",buffer[loopcount]);
		else
			printf(".");
	}
	printf("\n");
}

void brk(void)
{
	fclose(fp);
	exit(1);
}
