/* * * FD2SAP conversion FD => SAP * */ #include #include #define NBSIDE 4 #define NBTRACK 80 #define NBSECT 16 #define SECTSIZE 256 unsigned char disk[NBSIDE][NBTRACK][NBSECT][SECTSIZE]; #define SIDESIZE (NBTRACK*NBSECT*SECTSIZE) int LoadFD(char * name) { FILE * f; int sector,track,side; int nb_side,size; f=fopen(name,"rb"); if (f==NULL) return -1; fseek(f, 0L, SEEK_END); size = ftell(f); fseek(f, 0L, SEEK_SET); if (size==SIDESIZE) { for (track=0;track>4) & 0xfff) ^ magic_puk[puk]; c >>= 4; puk = (crcpuk_temp ^ c) & 0xf; crcpuk_temp = ((crcpuk_temp>>4) & 0xfff) ^ magic_puk[puk]; } void SaveSAP(char * name,int side) { FILE *f; unsigned char format,protection,piste,secteur; char *buffer; int fois; format=0; protection=0; /* variables de test */ f=fopen(name,"wb"); if (f==NULL) return; /* * Ecriture du header */ fwrite(puk_header,strlen(puk_header),sizeof(char),f); /* * Ecriture des donnees */ for (piste=0;piste<80;piste++) for (secteur=1;secteur<=16;secteur++) { crcpuk_temp = 0xffff; /* toujours remettre cette variable a 0xffff */ /* pour calculer un nouveau CRC */ crc_pukall(format); /* calcul du CRC d'un secteur */ crc_pukall(protection); crc_pukall(piste); crc_pukall(secteur); buffer=disk[side][piste][secteur-1]; for (fois=0;fois<=255;fois++) /* on admet que buffer contient les */ { /* donnees d'un secteur S.A.P. */ crc_pukall(buffer[fois]); buffer[fois]=buffer[fois]^0xb3; } fputc(format & 0xFF,f); fputc(protection & 0xFF,f); fputc(piste & 0xFF,f); fputc(secteur & 0xFF,f); fwrite(buffer,256,sizeof(char),f); fputc((crcpuk_temp >> 8) & 0xFF,f); fputc(crcpuk_temp & 0xFF,f); } fclose(f); } int main(int argc,char * argv[]) { char str[1024]; char str2[1024]; char str3[32]; int i,nb_side; if (argc!=3) { fprintf(stderr,"syntaxe : %s \n",argv[0]); exit (-1); } nb_side=LoadFD(argv[1]); if (nb_side<=0) { fprintf(stderr,"Bad FD file"); exit(-1); } strcpy(str,argv[2]); if (strlen(str)>4) if (strcmp(&str[strlen(str)-4],".sap")==0) str[strlen(str)-4]='\0'; for (i=0;i