#include #include #include #define PAGESIZE 2048 #define PAGECOUNT 720 void extract_blocks(FILE *, char *, int, int); char page[PAGESIZE]; /* * extract8 - extract binary images from given pages * on a BefOS boot disk. * Usage: extract8 befos.flp legend.bin 9 1 */ int main(int argc, char **argv) { int i = 1; FILE *infile; if ((infile = fopen(argv[1], "r")) == NULL) errx(1, "cannot read `%s'", argv[1]); for (i = 2; i < (argc - 2); i += 3) extract_blocks(infile, argv[i], atoi(argv[i + 1]), atoi(argv[i + 2])); fclose(infile); } void extract_blocks(FILE *infile, char *filename, int pagepos, int numpages) { FILE *outfile; int pos = pagepos * PAGESIZE; int length = numpages * PAGESIZE; int pageno = 1; printf("writing %s from page %d...\n", filename, pagepos); if ((outfile = fopen(filename, "w")) == NULL) errx(1, "cannot create `%s'", filename); while(pageno <= numpages) { printf("\textracting page %d...\n", pageno++); bzero(page, PAGESIZE); fseek(infile, pos, SEEK_SET); fread(page, PAGESIZE, 1, infile); fwrite(page, PAGESIZE, 1, outfile); pos += PAGESIZE; } fclose(outfile); }