89 lines
1.4 KiB
C
89 lines
1.4 KiB
C
/* dump.c core style dump of a file */
|
||
|
||
/* usage: A>DUMP B:BLIP.O */
|
||
|
||
|
||
char buffer[4096];
|
||
|
||
main(argc,argv)
|
||
int argc;
|
||
char *argv[]; {
|
||
unsigned i,numin,tot,file;
|
||
char *cfrom;
|
||
|
||
if (argc < 2) {
|
||
puts("Missing Filename\n");
|
||
}
|
||
|
||
tot=0;
|
||
if ((file=open(argv[1],0)) == -1) {
|
||
puts("Cannot Open ");
|
||
puts(argv[1]);
|
||
exit(1);
|
||
}
|
||
|
||
/* read and dump 4k at a time */
|
||
|
||
do {
|
||
numin=read(file,buffer,4096);
|
||
if (numin == -1) {
|
||
puts("Cannot Read ");
|
||
puts(argv[1]);
|
||
exit(1);
|
||
}
|
||
cfrom=0;
|
||
while (cfrom < numin) {
|
||
|
||
/* print the offset in hex */
|
||
|
||
ohw(cfrom+tot);
|
||
putchar(' ');
|
||
|
||
/* print 16 bytes in hex */
|
||
|
||
for (i=0; i < 16; i++) {
|
||
putchar(' ');
|
||
ohb(buffer[cfrom++]);
|
||
}
|
||
cfrom-=16;
|
||
puts(" *");
|
||
|
||
/* print the bytes in ascii */
|
||
|
||
for (i=0; i < 16; i++) {
|
||
putchar((buffer[cfrom] >= ' ' && buffer[cfrom] < 0x7f)
|
||
? buffer[cfrom]: '.');
|
||
cfrom++;
|
||
}
|
||
puts("*\n");
|
||
}
|
||
tot+=numin;
|
||
}
|
||
while (numin == 4096);
|
||
}
|
||
|
||
/* print a word in hex */
|
||
|
||
ohw(wrd)
|
||
unsigned wrd; {
|
||
ohb(wrd>>8);
|
||
ohb(wrd);
|
||
}
|
||
|
||
/* print a byte in hex */
|
||
|
||
ohb(byt)
|
||
char byt; {
|
||
onib(byt>>4);
|
||
onib(byt);
|
||
}
|
||
|
||
/* print a nibble as a hex character */
|
||
|
||
onib(nib)
|
||
char nib; {
|
||
|
||
nib&=15;
|
||
putchar((nib >= 10) ? nib-10+'A': nib+'0');
|
||
}
|
||
|