Newer
Older
tdump / tdump.c
/* DUMP.C - Dumps stdin To stdout In Hexadecimal Format
			Copyright (C) 1986-2020, T.A. Daneliuk
*/

#include	<stdio.h>
#include	<fcntl.h>
#include	<ctype.h>
#define		WIDTH	16

/* Function declarations */

void dl(void);
int  prnascii(char *equiv);
void tohex2(int x, char array[]);


/* Program globals */

static	char	lineno[]="000000";
static 	unsigned long line=0;

void main()

{

int	c,count;
char	array[4],equiv[WIDTH+1];
array[2]=' ';
array[3]='\0';
equiv[WIDTH]='\0';
count=WIDTH+1;
dl();

	while ((c=getc(stdin)) != EOF)
		{
		if (! (--count))
			{
			count=prnascii(equiv);
			dl();
			}
		tohex2(c,array);
		if (isprint(c))
			equiv[WIDTH-count]=c;
		else
			equiv[WIDTH-count]='.';
		fputs(array,stdout);
		}
	while (--count)
		{
		fputs("   ",stdout);
		equiv[WIDTH-count]=' ';
		}
	prnascii(equiv);
}

/************************ Display Current Line No. **************************/

void dl()

{

tohex2((int) (line & 0xffL),&lineno[4]);
tohex2((int) ((line >> 8) & 0xffL),&lineno[2]);
tohex2((int) ((line >> 16) & 0xffl),&lineno[0]);
fputs(lineno,stdout);
fputs(" => ",stdout);

}

/*********************** Display ASCII Equivalents **************************/

int	prnascii(equiv)

char	*equiv;

{
fputs(" | ",stdout);
fputs(equiv,stdout);
fputs(" |\n",stdout);
line=line + 0x10;
return(WIDTH);
}




/********************* Convert Binary Value To Hex **************************/

/* TOHEX2.C - 	This function is passed an integer value and an array
				location which can hold at least a 2 element string.
				The low 8 bits of the integer are converted to an
				equivalent hexadecimal string which is stored in the
				array at subscripts 0 and 1.
*/


void tohex2(i,array)

int		i;
char	array[];

{

int		temp;
static char	conv[]={"0123456789ABCDEF"};

temp=i;
temp=temp & 0x000f;							/* Mask all but low nybble */
array[1]=conv[temp];						/* Use to index into conversion table */
temp=i;										/* Now do high nybble */
temp=temp >> 4;
temp=temp & 0x000f;
array[0]=conv[temp];

}