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');
|
|||
|
}
|
|||
|
|