rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( int argc, char **argv )
{
int seek_header, seek_ecc, sector_size;
long i, source_length;
char buf[2352], destfilename[2354]; /* Linux */
const char SYNC_HEADER[12] = { 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0 };
FILE *fdest, *fsource;
if (argc < 2)
{
printf("Error: bad syntax\n\nUsage is: bin2iso image.bin [image.iso]\n");
exit(EXIT_FAILURE);
}
if (argc >= 3)
{
strcpy(destfilename, argv[2]);
}
else
{
strcpy(destfilename, argv[1]);
if (strlen(argv[1]) < 5 || strcmp(destfilename+strlen(argv[1])-4, ".bin"))
strcpy(destfilename+strlen(argv[1]), ".iso");
else
strcpy(destfilename+strlen(argv[1])-4, ".iso");
}
fsource = fopen(argv[1],"rb");
fdest = fopen(destfilename,"wb");
fread(buf, sizeof(char), 16, fsource);
if (memcmp(SYNC_HEADER, buf, 12))
{
seek_header = 8; // Mode2/2336 // ** Mac: change to 0
seek_ecc = 280;
sector_size = 2336;
}
else
{
switch(buf[15])
{
case 2:
seek_header = 24; // Mode2/2352 // ** Mac: change to 16
seek_ecc = 280;
sector_size = 2352;
break;
case 1:
seek_header = 16; // Mode1/2352
seek_ecc = 288;
sector_size = 2352;
break;
default:
printf("Error: Unsupported track mode");
exit(EXIT_FAILURE);
}
}
fseek(fsource, 0L, SEEK_END);
source_length = ftell(fsource)/sector_size;
fseek(fsource, 0L, SEEK_SET);
for(i = 0; i < source_length; i++)
{
fseek(fsource, seek_header, SEEK_CUR);
fread(buf, sizeof(char), 2048, fsource); // ** Mac: change to 2056 for Mode2
fwrite(buf, sizeof(char), 2048, fdest); // ** same as above
fseek(fsource, seek_ecc, SEEK_CUR);
}
fclose(fdest);
fclose(fsource);
exit(EXIT_SUCCESS);
}