dos_compilers/DeSmet C88 v24/DUMP.C

89 lines
1.4 KiB
C++
Raw Normal View History

2024-06-30 23:24:37 +02:00
/* 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');
}