All pastes #245655 Raw Edit

Anonymous

public text v1 · immutable
#245655 ·published 2006-11-11 06:17 UTC
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);
}