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