#include #include #include // BIN2ISO (C) 2000 by DeXT // // This is a very simple utility to convert a BIN image (either RAW/2352 or Mode2/2336 format) // to standard ISO format (2048 b/s). Structure of images are as follows: // // Mode 1 (2352): Sync (12), Address (3), Mode (1), Data (2048), ECC (288) // Mode 2 (2352): Sync (12), Address (3), Mode (1), Subheader (8), Data (2048), ECC (280) // Mode 2 (2336): Subheader (8), Data (2048), ECC (280) // // Mode2/2336 is the same as Mode2/2352 but without header (sync+addr+mode) // Sector size is detected by the presence of Sync data // Mode is detected from Mode field // // Tip for Mac users: for Mode2 tracks preserve Subheader // (sub 8 from seek_header and write 2056 bytes per sector) // Changelog: // 2000/11/16 - added mode detection for RAW data images (adds Mode2/2352 support) // ITs been GPL'd !!! (Thanks DeXT!) /* [COPY] --- T2-COPYRIGHT-NOTE-BEGIN --- [COPY] This copyright note is auto-generated by ./scripts/Create-CopyPatch. [COPY] [COPY] T2 SDE: package/.../bin2iso/bin2iso.desc [COPY] Copyright (C) 2006 The T2 SDE Project [COPY] [COPY] More information can be found in the files COPYING and README. [COPY] [COPY] This program is free software; you can redistribute it and/or modify [COPY] it under the terms of the GNU General Public License as published by [COPY] the Free Software Foundation; version 2 of the License. A copy of the [COPY] GNU General Public License can be found in the file COPYING. [COPY] --- T2-COPYRIGHT-NOTE-END --- [I] A Bin to ISO converter [T] The command line program bin2iso converts BIN image files to standard [T] ISO image files. [U] http://mange.dynup.net/linux/bin2iso/ [A] DeXT [M] Nagy Karoly Gabriel [C] extra/tool [L] OpenSource [S] Stable [V] 0.2 [P] X -----5---9 800.000 [D] 117263323 bin2iso.c http://mange.dynup.net/linux/bin2iso/ [XMange] Last copyright recieved from: http://svn.exactcode.de/t2/trunk/package/filesystem/bin2iso/bin2iso.desc New URL is: http://mange.dynalias.org/linux/bin2iso/ */ int main( int argc, char **argv ) { int seek_header, seek_ecc, sector_size; long i, source_length; char buf[2352], destfilename[2354]; const char SYNC_HEADER[12] = { 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0 }; FILE *fdest, *fsource; printf("Get version 0.4 instead: http://mange.dynalias.org/linux/bin2iso\n"); return; 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); }