home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume6
/
hd
< prev
next >
Wrap
Text File
|
1989-02-03
|
5KB
|
136 lines
Path: xanth!nic.MR.NET!csd4.milw.wisc.edu!leah!itsgw!steinmetz!uunet!allbery
From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
Newsgroups: comp.sources.misc
Subject: v06i029: hd- A hex dump utility
Message-ID: <47762@uunet.UU.NET>
Date: 29 Jan 89 21:24:51 GMT
Sender: allbery@uunet.UU.NET
Reply-To: hal@dad.UUCP (Harold A. Miller)
Lines: 124
Approved: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
Posting-number: Volume 6, Issue 29
Submitted-by: hal@dad.UUCP (Harold A. Miller)
Archive-name: hd
#! /bin/sh
echo shar: extracting hd.c
if test -f 'hd.c' ; then
echo shar: will not overwrite hd.c
else
cat > hd.c << '@EOF hd.c'
/* ********************************************************************** */
/* hd.c */
/* A CP/M dump-like utility */
/* Written by: Mike Ewan and Hal Miller */
/* tektronix!tekgen!nesa!raven!mike uw-beaver!tikal!dad!hal */
/* Use hereby authorized by anyone for any reason, except sale. */
/* ********************************************************************** */
#include <stdio.h>
main(argc,argv)
int argc ;
char *argv[] ;
{
FILE *fopen(), *fp ;
int c ; /* work character */
int llgt ; /* for efficiency in loops */
int x ; /* ascii column index */
int z ; /* loop counter */
long addr ; /* starting address for line */
long start ; /* optional begin file offset */
char *flname ; /* pointer for file open */
char str[8] ; /* work buffer for conversion */
char asc[17] ; /* contents of ascii column */
if (argc == 3)
{ /* given filename and starting offset */
flname = argv[1] ;
sscanf(argv[2], "%x", &start) ;
}
else
{
if (argc == 2)
{ /* no offset given, use beginning of file */
flname = argv[1] ;
start = 0L ;
}
else
{
printf("usage: %s filename [offset]\n", argv[0]) ;
exit(1) ;
}
}
if ((fp = fopen(flname,"r")) == NULL)
{
printf("%s: unable to open %s\n", argv[0], flname) ;
exit(1) ;
}
x = 0 ;
addr = start ;
sprintf(str, "%08x", addr) ; /* set up and print start address */
llgt = strlen(str) ; /* for the first row */
for (z=0; z<llgt; z++)
if (str[z] >= 'a' && str[z] <= 'f')
str[z] &= 0137 ;
printf("%8s: ", str) ;
if (start != 0) /* get to offset if need be */
fseek(fp, start, 0) ;
while ((c = getc(fp)) != EOF)
{ /* read and process entire file */
sprintf(str,"%02x",c) ; /* set up and print the hex stuff */
if (str[0] >= 'a' && str[0] <= 'f')
str[0] &= 0137 ;
if (str[1] >= 'a' && str[1] <= 'f')
str[1] &= 0137 ;
printf("%s ",str) ;
if ((c >= ' ') && (c <= '~')) /* set up the ascii stuff */
asc[x] = c ;
else
asc[x] = '.' ;
x++ ;
if (x >= 16)
{ /* got enough to print a line */
putchar(32) ;
for (z=0; z<=15; z++)
{
putchar(asc[z]) ;
asc[z] = '\0' ;
}
putchar(10) ;
x = 0 ;
addr += 16L ; /* set up for next line's address */
sprintf(str, "%08x", addr) ;
llgt = strlen(str) ;
for (z=0; z<=llgt; z++)
if (str[z] >= 'a' && str[z] <= 'f')
str[z] &= 0137 ;
printf("%8s: ",str) ;
}
} /* end of file */
llgt = 15 - x ; /* space fill rest of last line */
for (z=0; z<=llgt; z++)
printf(" ") ;
putchar(32) ;
for (z=0; z<=15; z++)
putchar(asc[z]) ;
putchar(10) ;
fclose(fp) ;
exit(0) ;
}
@EOF hd.c
if test 3871 -ne "`wc -c < hd.c`"; then
echo shar: checksum error - number of characters should be 3871
fi
fi
chmod 666 hd.c