/* minimaliseer.c: minimaliseer bbc diskbeeld (SINGLE DENSITY) Copyright (C) W.H.Scholten 1996 17-4-1996 VOOR bbcim VERSIE >=0.61 */ void min_diskim(char *disk) { FILE *fpdisk, *fpdisk2; char backupnaam[50]; char bbcfile_naam[12]; unsigned char byte, H, eellddss; long startsector, file; long startsector2=2; unsigned char files; long length; int i; fpdisk=fopen(disk, "rb"); fseek(fpdisk,256L+5L,SEEK_SET); fread(&files,1,1,fpdisk); /* // int rfiles=files/8; // #ifdef NL // printf("aantal bestanden: %d\n",rfiles); // #else // printf("number of files: %d\n",rfiles); // #endif */ if (files>0){ fclose(fpdisk); strcpy(backupnaam, disk);strcat(backupnaam,"%"); remove(backupnaam); rename(disk,backupnaam); fpdisk=fopen(backupnaam,"rb"); fpdisk2=fopen(disk,"wb"); /*CATALOGUS KOPIEEREN */ for(i=0;i<512;i++){ fread (&byte,1,1,fpdisk); fwrite (&byte,1,1,fpdisk2); } /* Hoofdlus: alle bestanden opzoeken. */ for(file=files;file>0; file -=8){ /* THE FOLLOWING IS ONLY NEEDED FOR FILENAME PRINTING */ fseek(fpdisk,file+15L,SEEK_SET); fread(&byte,1,1,fpdisk); bbcfile_naam[0]=(byte & 0x7F); bbcfile_naam[1]='.'; fseek(fpdisk,file,SEEK_SET); for(i=0; i<7; i++){ fread(&byte,1,1,fpdisk); bbcfile_naam[i+2]=byte; } /* fread(bbcfile_naam+2,1,7,fpdisk);*/ bbcfile_naam[9]=0; /* FILE LENGTE */ fseek(fpdisk,file+256L+4L,0); fread(&byte,1,1,fpdisk); fread(&H,1,1,fpdisk); fread(&eellddss,1,1,fpdisk); length=H*256L+byte+(eellddss & 0x30)*16L*256L; /* STARTSECTOR */ fread(&byte,1,1,fpdisk); startsector=byte+(eellddss & 3)*256L; /* nieuwe startsector */ fseek(fpdisk2,256+file+6,SEEK_SET); eellddss =(eellddss & 0xFC)+(startsector2>>8); fwrite(&eellddss,1,1,fpdisk2); byte=startsector2 & 0xFF; fwrite(&byte,1,1,fpdisk2); printf("startsector %3d > %3d\n", (int) startsector, (int) startsector2); fseek(fpdisk,startsector*256, SEEK_SET); fseek(fpdisk2,startsector2*256, SEEK_SET); for (i=0; i<((length+255)>>8)*256; i++){ fread(&byte,1,1,fpdisk); if (feof(fpdisk) && (i>8); } /* FOR file */ }/* if */ }