/* produce a sparse image file */ int make_sparse_image(FILE *fp, Bit64u sec) { Bit64u numpages; sparse_header_t header; size_t sizesofar; size_t padtopagesize; memset(&header, 0, sizeof(header)); header.magic = htod32(SPARSE_HEADER_MAGIC); header.version = htod32(SPARSE_HEADER_VERSION); header.pagesize = htod32((1 << 10) * 32); // Use 32 KB Pages - could be configurable numpages = (sec / (dtoh32(header.pagesize) / 512)) + 1; header.numpages = htod32((Bit32u)numpages); if (numpages != dtoh32(header.numpages)) { fclose (fp); fatal ("ERROR: The disk image is too large for a sparse image!"); // Could increase page size here. // But note this only happens at 128 Terabytes! } if (fwrite(&header, sizeof(header), 1, fp) != 1) { fclose (fp); fatal ("ERROR: The disk image is not complete - could not write header!"); } fileset(fp, 0xff, 4 * dtoh32(header.numpages)); sizesofar = SPARSE_HEADER_SIZE + (4 * dtoh32(header.numpages)); padtopagesize = dtoh32(header.pagesize) - (sizesofar & (dtoh32(header.pagesize) - 1)); fileset(fp, 0, padtopagesize); return 0; }
searchnum(int num,char *name) { SCRN *lp; char *p; p = name; while((p = strchr(p,'/')) != NULL) *p= '\\'; if(lng != ASM && strcmp(name,editfile[edfile].filename)) fileset(name,OFF); for(lp = editfile[edfile].topline;lp->num != num;lp= lp->fwd) { if(lp == NULL) { msg("Illegal error file <illegal line number>\a"); return(NG); } } line= lp; curposy= disset((lastdisplay-widbase)/2); curposx= 0; return(OK); }