Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

mdf2iso

  • Loading branch information...
commit 49364501b49e209c1e5602ddde1dd6531e118fab 1 parent 730e04a
Piotr Karbowski authored
1  app-cdr/mdf2iso/Manifest
View
@@ -0,0 +1 @@
+DIST mdf2iso-0.3.0-src.tar.bz2 97723 SHA256 7b6622c58bc6a5111eba719d2b55cdfab54cbb26f3aea98b7e5db0eb0062be84 SHA512 fa5360095824b6c833bcd04649f6dc864fa43196a5e737d24babd521fb6600fb60ea1129f53ba481255e79b31fa9e54f11662a37c6c8619f782c0c2c8e05f019 WHIRLPOOL 6fc326d3884a5e038e301da711f8004e217f5f8543a67c0b06a8904b64b72861c83024c730b92de350316321c30b12b663533131c0aaf0f4b8adc6c47e129a3e
684 app-cdr/mdf2iso/files/mdf2iso-0.3.0-bigfiles.patch
View
@@ -0,0 +1,684 @@
+Only in mdf2iso/src: .deps
+Only in mdf2iso.new/src: .kdbgrc.mdf2iso
+diff -bur mdf2iso/src/Makefile.am mdf2iso.new/src/Makefile.am
+--- mdf2iso/src/Makefile.am 2005-05-19 11:24:11.000000000 +0200
++++ mdf2iso.new/src/Makefile.am 2005-07-31 17:47:36.000000000 +0200
+@@ -1,2 +1,3 @@
+ bin_PROGRAMS = mdf2iso
+ mdf2iso_SOURCES = mdf2iso.c
++AM_CFLAGS = -D_FILE_OFFSET_BITS=64 -Wall
+diff -bur mdf2iso/src/Makefile.in mdf2iso.new/src/Makefile.in
+--- mdf2iso/src/Makefile.in 2005-05-22 21:42:09.000000000 +0200
++++ mdf2iso.new/src/Makefile.in 2005-07-31 17:49:16.000000000 +0200
+@@ -136,6 +136,7 @@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+ mdf2iso_SOURCES = mdf2iso.c
++AM_CFLAGS = -D_FILE_OFFSET_BITS=64 -Wall
+ all: all-am
+
+ .SUFFIXES:
+@@ -149,9 +150,9 @@
+ exit 1;; \
+ esac; \
+ done; \
+- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ cd $(top_srcdir) && \
+- $(AUTOMAKE) --foreign src/Makefile
++ $(AUTOMAKE) --gnu src/Makefile
+ .PRECIOUS: Makefile
+ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+diff -bur mdf2iso/src/mdf2iso.c mdf2iso.new/src/mdf2iso.c
+--- mdf2iso/src/mdf2iso.c 2005-05-22 21:52:08.000000000 +0200
++++ mdf2iso.new/src/mdf2iso.c 2005-07-31 19:41:56.000000000 +0200
+@@ -1,4 +1,4 @@
+- /* $Id: mdf2iso.c, 22/05/05
++/* $Id: mdf2iso.c, 22/05/05
+
+ Copyright (C) 2004,2005 Salvatore Santagati <salvatore.santagati@gmail.com>
+
+@@ -16,19 +16,14 @@
+ along with this program; if not, write to the
+ Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+- */
++*/
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <errno.h>
+
+-#define VERSION "0.3.0"
+-
+-/* Support Large File */
+-
+-#define _FILE_OFFSET_BITS 64
+-
++#define VERSION "0.3.1"
+
+
+ const char SYNC_HEADER[12] = { (char) 0x00,
+@@ -83,14 +78,21 @@
+ (char) 0x00
+ };
+
++#define ISO9660 0
++#define SYNC 1
++#define SYNC_MDF 2
++#define MDF_AUDIO 3
++#define UNKNOWN -1
+
+-void
+-toc_file (char *destfilename, int sub)
++int toc_file (char *destfilename, int sub)
+ {
+- char destfiletoc[1024], destfiledat[1024];
++ int ret=0;
++ char *destfiletoc;
++ char *destfiledat;
+ FILE *ftoc;
+- strcpy (destfiletoc, destfilename);
+- strcpy (destfiledat, destfilename);
++
++ destfiletoc=strdup(destfilename);
++ destfiledat=strdup(destfilename);
+ strcpy (destfiletoc + strlen (destfilename) - 4, ".toc");
+ strcpy (destfiledat + strlen (destfilename) - 4, ".dat");
+
+@@ -100,11 +102,8 @@
+ fprintf (ftoc, "// Track 1\n");
+ fprintf (ftoc, "TRACK MODE1_RAW");
+
+- if (sub == 1)
+- fprintf (ftoc, " RW_RAW\n");
+-
+- else
+- fprintf (ftoc, "\n");
++ if (sub == 1) fprintf (ftoc, " RW_RAW\n");
++ else fprintf (ftoc, "\n");
+
+ fprintf (ftoc, "NO COPY\n");
+ fprintf (ftoc, "DATAFILE \"%s\"\n", destfiledat);
+@@ -114,26 +113,27 @@
+ }
+ else
+ {
+- printf ("%s\n", strerror (errno));
+- exit (EXIT_FAILURE);
++ printf ("Error opening %s for output: %s\n",destfiletoc,strerror(errno));
++ ret=-1;
+ };
+-
++ free(destfiletoc);
++ free(destfiledat);
++ return ret;
+ }
+
+-int
+-number_file (char *destfilename)
++/*
++int number_file (char *destfilename)
+ {
+ int i = 1, test_mdf = 0;
+ int n_mdf;
+ char mdf[2], destfilemdf[2354];
+ FILE *fsource;
++
+ strcpy (destfilemdf, destfilename);
+ strcpy (destfilemdf + strlen (destfilename) - 1, ".0");
+ for (i = 0; test_mdf == 0; i++)
+-
+ {
+ if ((fsource = fopen (destfilemdf, "rb")) != NULL)
+-
+ {
+ printf ("\nCheck : ");
+ sprintf (mdf, "md%d", i);
+@@ -141,203 +141,219 @@
+ printf ("%s, ", destfilemdf);
+ fclose (fsource);
+ }
+-
+ else
+ {
+ test_mdf = 1;
+ }
+- };
++ }
+ printf ("\r \n");
+ n_mdf = i - 1;
+ return (n_mdf);
+ }
++*/
+
+-void
+-cuesheets (char *destfilename)
++int cuesheets (char *destfilename)
+ {
+- char destfilecue[1024], destfilebin[1024];
++ int ret=0;
++ char *destfilecue;
++ char *destfilebin;
+ FILE *fcue;
+- strcpy (destfilecue, destfilename);
+- strcpy (destfilebin, destfilename);
++
++ destfilecue=strdup(destfilename);
++ destfilebin=strdup(destfilename);
+ strcpy (destfilecue + strlen (destfilename) - 4, ".cue");
+ strcpy (destfilebin + strlen (destfilename) - 4, ".bin");
+- fcue = fopen (destfilecue, "w");
++ if ((fcue = fopen (destfilecue, "w"))!=NULL)
++ {
+ fprintf (fcue, "FILE \"%s\" BINARY\n", destfilebin);
+ fprintf (fcue, "TRACK 1 MODE1/2352\n");
+ fprintf (fcue, "INDEX 1 00:00:00\n");
+ rename (destfilename, destfilebin);
+ printf ("Create Cuesheets : %s\n", destfilecue);
+ fclose (fcue);
++ }
++ else
++ {
++ printf ("Error opening %s for output: %s\n",destfilecue,strerror(errno));
++ ret=-1;
++ }
++ return ret;
+ }
+
+-void
+-main_percent (int percent_bar)
++int previous_percent=-1;
++void main_percent (int percent_bar)
++// Prints a progress bar, takes a percentage as argument.
+ {
+- int progress_bar, progress_space;
++ //int progress_bar, progress_space;
++
++ if (percent_bar==previous_percent) return; // Nothing changed, don't waste CPU cycles.
++
++ printf("%3d%% [:%.*s>%.*s:]\r",percent_bar,20-(percent_bar/5)," ",
++ percent_bar/5,"====================");
++ /*
+ printf ("%d%% [:", percent_bar);
+- for (progress_bar = 1; progress_bar <= (int) (percent_bar / 5);
+- progress_bar++)
++ for (progress_bar = 1; progress_bar <= (int) (percent_bar / 5); progress_bar++)
+ printf ("=");
+ printf (">");
+
+- for (progress_space = 0; progress_space < (20 - progress_bar);
+- progress_space++)
+- printf (" ");
++ for (; progress_bar <= 20; ++progress_bar) printf (" ");
+ printf (":]\r");
++ */
+ }
+
+-void
+-usage ()
++void usage ()
++// Prints the command line syntax
+ {
+- printf ("mdf2iso v%s by Salvatore Santagati\n", VERSION);
+- printf ("Web : http//mdf2iso.berlios.de\n");
+- printf ("Email : salvatore.santagati@gmail.com\n");
+- printf ("Irc : irc.freenode.net #ignus\n");
+- printf ("Note : iodellavitanonhocapitouncazzo\n");
+- printf ("License : released under the GNU GPL v2 or later\n\n");
++ printf (" Web : http//mdf2iso.berlios.de\n");
++ printf (" Email : salvatore.santagati@gmail.com\n");
++ printf (" Irc : irc.freenode.net #ignus\n");
++ printf (" Note : iodellavitanonhocapitouncazzo\n\n");
+ printf ("Usage :\n");
+- printf ("mdf2iso [OPTION] [BASENAME.MDF] [DESTINATION]\n\n");
+- printf ("OPTION\n");
+- printf ("\t--toc Generate toc file\n");
+- printf ("\t--cue Generate cue file\n");
+- printf ("\t--help display this notice\n\n");
++ printf ("mdf2iso [--cue|--toc|--help] <sourcefile> [destfile]\n\n");
++ printf ("Options:\n");
++ printf (" --toc Generate toc/dat files\n");
++ printf (" --cue Generate cue/bin files\n");
++ printf (" --help Display this notice\n");
++ printf (" sourcefile\tFilename of the .mdf file to be converted\n");
++ printf (" destfile\tFilename of the target ISO9660 file.\n"\
++ "\t\tIf none given, one is derived from sourcefile.\n\n");
+ }
+
+-int
+-main (int argc, char **argv)
++char mdftype(FILE *f)
++/* returns
++ -1 for unknown
++ 0 for ISO9660
++ 1 for SYNC
++ 2 for SYNC MDF
++ 3 for MDF Audio
++ (see #defines above)
++*/
+ {
+- int seek_ecc, sector_size, seek_head, sector_data, n_mdf;
++ char buf[12];
++
++ fseek(f, 32768, SEEK_SET);
++ fread(buf, sizeof (char), 8, f);
++ if (!memcmp (ISO_9660, buf, 8)) return ISO9660; // File is ISO9660
++
++ fseek(f, 0L, SEEK_SET);
++ fread(buf, sizeof (char), 12, f);
++
++ fseek (f, 2352, SEEK_SET);
++
++ if (!memcmp (SYNC_HEADER, buf, 12)) // Has SYNC_HEADER
++ {
++ fread (buf, sizeof (char), 12, f);
++ if (!memcmp (SYNC_HEADER_MDF, buf, 12)) return SYNC_MDF; // File is SYNC MDF
++ if (!memcmp (SYNC_HEADER, buf, 12)) return SYNC; // File is SYNC
++ }
++ else // Does not have SYNC_HEADER
++ {
++ fread(buf, sizeof (char), 12, f);
++ if (!memcmp (SYNC_HEADER_MDF_AUDIO, buf, 12)) return MDF_AUDIO; // File is MDF Audio
++ }
++
++ // Reached a point where nothing else matters.
++ return UNKNOWN; // Unknown format
++}
++
++
++// === Main program code ===
++
++int main (int argc, char **argv)
++{
++ int seek_ecc, sector_size, seek_head, sector_data;//, n_mdf;
+ int cue = 0, cue_mode = 0, sub = 1, toc = 0, sub_toc = 0;
+ int opts = 0;
+- double size_iso, write_iso;
+- long percent = 0;
+- long i, source_length, progressbar;
+- char buf[2448], destfilename[2354];
++ long i, source_length;
++ char buf[2448];
++ char *destfilename=NULL;
++ char *basefilename=NULL;
+ FILE *fdest, *fsource;
+
++ // Print identification
++ printf ("mdf2iso v%s by Salvatore Santagati\n", VERSION);
++ printf ("Licensed under GPL v2 or later\n");
+
+- if (argc < 2)
+
++ // *** Process command line options ***
++
++ if (argc < 2)
+ {
+- usage ();
+- exit (EXIT_FAILURE);
++ // Not enough parameters; print help
++ usage();
++ exit(EXIT_FAILURE);
+ }
+
+- else
+-
+- {
++ // Search for options --cue and --toc
+ for (i = 0; i < argc; i++)
+-
+ {
+-
+ if (!strcmp (argv[i], "--help"))
+-
+ {
+ usage ();
+ exit (EXIT_SUCCESS);
+ }
+ if (!strcmp (argv[i], "--cue"))
+-
+ {
+ cue = 1;
+ opts++;
+ }
+ if (!strcmp (argv[i], "--toc"))
+-
+ {
+ toc = 1;
+ opts++;
+ }
+ }
+
+- if ((cue == 1) && (toc == 1))
+-
+- {
+- usage ();
+- exit (EXIT_FAILURE);
+- }
+- if ((opts == 1) && (argc <= 2))
+-
++ // Catch impossible parameter combinations
++ if (((cue == 1) && (toc == 1)) ||
++ ((opts == 1) && (argc <= 2)))
+ {
+- usage ();
+- exit (EXIT_FAILURE);
++ usage();
++ exit(EXIT_FAILURE);
+ }
+
++ // Get the base filename
++ basefilename=argv[1+opts]; // simple pointer, but makes life easier.
+
++ // Get the destination filename
+ if (argc >= (3 + opts))
+- strcpy (destfilename, argv[2 + opts]);
+-
+- else
+-
+- {
+- strcpy (destfilename, argv[1 + opts]);
+- if (strlen (argv[1 + cue]) < 5
+- || strcmp (destfilename + strlen (argv[1 + opts]) - 4, ".mdf"))
+- strcpy (destfilename + strlen (argv[1 + opts]), ".iso");
+-
++ // The destination filename is explicitly entered at the prompt
++ destfilename=strdup(argv[2 + opts]);
+ else
+- strcpy (destfilename + strlen (argv[1 + opts]) - 4, ".iso");
+- }
+- if ((fsource = fopen (argv[1 + opts], "rb")) != NULL)
+-
+ {
+- fseek (fsource, 32768, SEEK_CUR);
+- fread (buf, sizeof (char), 8, fsource);
+- if (memcmp (ISO_9660, buf, 8))
+-
++ // Derive destination filename from the basename:
++ // If basename is "*.mdf" use "*.iso" als destname
++ // otherwise simply append ".iso" to the basename to create destname.
++ destfilename=strdup(basefilename);
++ i=strlen(destfilename); // Reusing 'i' here as temporary variable
++ if (i < 5 || strcmp(destfilename + i - 4, ".mdf"))
+ {
+- fseek (fsource, 0L, SEEK_SET);
+- fread (buf, sizeof (char), 12, fsource);
+- if (!memcmp (SYNC_HEADER, buf, 12))
+-
+- {
+- fseek (fsource, 0L, SEEK_SET);
+- fseek (fsource, 2352, SEEK_CUR);
+- fread (buf, sizeof (char), 12, fsource);
+- if (!memcmp (SYNC_HEADER_MDF, buf, 12))
+-
+- {
+- if (cue == 1)
+- {
+- cue_mode = 1;
+-
+- /* BAD SECTOR TO NORMAL IMAGE */
+- seek_ecc = 96;
+- sector_size = 2448;
+- sector_data = 2352;
+- seek_head = 0;
+- }
+-
+- else if (toc == 0)
+-
+- {
+-
+- /*BAD SECTOR */
+- seek_ecc = 384;
+- sector_size = 2448;
+- sector_data = 2048;
+- seek_head = 16;
++ destfilename=realloc(destfilename,i+5);
++ strcat(destfilename, ".iso");
+ }
+-
+ else
+-
+- {
+-
+- /*BAD SECTOR */
+- seek_ecc = 0;
+- sector_size = 2448;
+- sector_data = 2448;
+- seek_head = 0;
+- sub_toc = 1;
+- }
++ strcpy(destfilename + i - 3, "iso");
+ }
+
+- else
++ // *** Preprocess basefile ***
+
++ // Try opening basefile
++ if ((fsource = fopen(basefilename, "rb")) == NULL)
+ {
+- if (!memcmp (SYNC_HEADER, buf, 12))
++ free(destfilename);
++ printf ("Could not open %s: %s\n", basefilename, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
+
++ // Determine filetype & set some stuff accordingly (or exit)
++ switch (mdftype(fsource))
+ {
++ case ISO9660:
++ printf("%s is already ISO9660.\n",basefilename);
++ fclose(fsource);
++ free(destfilename);
++ exit(EXIT_SUCCESS);
++ case SYNC:
+ if (cue == 1)
+ {
+ cue_mode = 1;
+@@ -348,129 +364,134 @@
+ seek_head = 0;
+ }
+ if (toc == 0)
+-
+ {
+-
+ /*NORMAL IMAGE */
+ seek_ecc = 288;
+ sector_size = 2352;
+ sector_data = 2048;
+ seek_head = 16;
+ }
+-
+ else
+-
+ {
+ seek_ecc = 0;
+ sector_size = 2352;
+ sector_data = 2352;
+ seek_head = 0;
+ }
+- }
+-
+- else
+-
+- {
+- printf ("Sorry I don't know this format :(\n");
+- exit (EXIT_FAILURE);
+- }
+- }
+- }
+-
+- else
+-
++ break;
++ case SYNC_MDF:
++ if (cue == 1)
+ {
+- fseek (fsource, 0L, SEEK_SET);
+- fseek (fsource, 2352, SEEK_CUR);
+- fread (buf, sizeof (char), 12, fsource);
+- if (memcmp (SYNC_HEADER_MDF_AUDIO, buf, 12))
++ cue_mode = 1;
+
++ /* BAD SECTOR TO NORMAL IMAGE */
++ seek_ecc = 96;
++ sector_size = 2448;
++ sector_data = 2352;
++ seek_head = 0;
++ }
++ else if (toc == 0)
+ {
+- printf ("Sorry I don't know this format :(\n");
+- exit (EXIT_FAILURE);
++ /*BAD SECTOR */
++ seek_ecc = 384;
++ sector_size = 2448;
++ sector_data = 2048;
++ seek_head = 16;
+ }
+-
+ else
+-
+ {
+-
++ /*BAD SECTOR */
++ seek_ecc = 0;
++ sector_size = 2448;
++ sector_data = 2448;
++ seek_head = 0;
++ sub_toc = 1;
++ }
++ break;
++ case MDF_AUDIO:
+ /*BAD SECTOR AUDIO */
+ seek_head = 0;
+ sector_size = 2448;
+ seek_ecc = 96;
+ sector_data = 2352;
+ cue = 0;
++ break;
++ default:printf("Unknown format for %s.\n",basefilename);
++ fclose(fsource);
++ free(destfilename);
++ exit (EXIT_FAILURE);
+ }
+- }
+- if ((fdest = fopen (destfilename, "wb")) != NULL);
+
+- else
++ // *** Create destination file ***
++
++ // Try opening the destination file for output
++ if ((fdest = fopen (destfilename, "wb")) == NULL)
+ {
+- printf ("%s\n", strerror (errno));
++ printf ("Unable to open %s for output: %s\n",destfilename,strerror(errno));
++ free(destfilename);
++ fclose(fsource);
+ exit (EXIT_FAILURE);
+- };
++ }
++
++
+ fseek (fsource, 0L, SEEK_END);
+ source_length = ftell (fsource) / sector_size;
+- size_iso = (int) (source_length * sector_data);
+- progressbar = 100 / source_length;
+ fseek (fsource, 0L, SEEK_SET);
+-
+ {
+ for (i = 0; i < source_length; i++)
+-
+ {
+ fseek (fsource, seek_head, SEEK_CUR);
+- if (fread (buf, sizeof (char), sector_data, fsource));
+-
+- else
++ if (fread(buf, sizeof (char), sector_data, fsource)!=sector_data)
+ {
+- printf ("%s\n", strerror (errno));
++ printf ("Error reading from %s: %s\n",basefilename, strerror (errno));
++ fclose(fsource);
++ fclose(fdest);
++ remove(destfilename);
++ free(destfilename);
+ exit (EXIT_FAILURE);
+- };
+- if (fwrite (buf, sizeof (char), sector_data, fdest));
+-
+- else
++ }
++ if (fwrite (buf, sizeof (char), sector_data, fdest)!=sector_data)
+ {
+- printf ("%s\n", strerror (errno));
++ printf ("Error writing to %s: %s\n",destfilename, strerror (errno));
++ fclose(fsource);
++ fclose(fdest);
++ remove(destfilename);
++ free(destfilename);
+ exit (EXIT_FAILURE);
+- };
++ }
+ fseek (fsource, seek_ecc, SEEK_CUR);
+- write_iso = (int) (sector_data * i);
+- if (i != 0)
+- percent = (int) (write_iso * 100 / size_iso);
+- main_percent (percent);
+- }} printf ("100%%[:====================:]\n");
++ main_percent(i*100/source_length);
++ }
++ } printf ("100%% [:=====================:]\n");
+
+ fclose (fsource);
+ fclose (fdest);
+
+- if (cue == 1)
+- cuesheets (destfilename);
+- if (toc == 1)
+- toc_file (destfilename, sub_toc);
++ // *** create Toc or Cue file is requested ***
++ if (cue == 1) if (cuesheets(destfilename))
++ {
++ free(destfilename);
++ exit(EXIT_FAILURE);
++ }
++ if (toc == 1) if (toc_file(destfilename, sub_toc))
++ {
++ free(destfilename);
++ exit(EXIT_FAILURE);
++ }
+ if ((toc == 0) && (cue == 0))
+- printf ("Create iso9660: %s\n", destfilename);
++ printf("Created iso9660: %s\n", destfilename);
++
++ free(destfilename);
+
+ exit (EXIT_SUCCESS);
+- }
+
+- else
+- printf ("This is file iso9660 ;)\n");
++/*
+ n_mdf = number_file (destfilename) - 1;
+- /* if (n_mdf > 1)
+-
++ / * if (n_mdf > 1)
+ {
+ printf ("\rDetect %d md* file and now emerge this\n", n_mdf);
+ }
+- */
++ * /
+ fclose (fsource);
+- exit (EXIT_SUCCESS);
+- }
+-
+- else
+- {
+- printf ("%s\n", strerror (errno));
+- exit (EXIT_FAILURE);
+- };
+- }
++ exit (EXIT_SUCCESS);*/
+ }
+
24 app-cdr/mdf2iso/mdf2iso-0.3.0.ebuild
View
@@ -0,0 +1,24 @@
+EAPI="4"
+
+inherit eutils
+
+DESCRIPTION="mdf to iso converter"
+HOMEPAGE="http://mdf2iso.berlios.de/"
+SRC_URI="http://download.berlios.de/${PN}/${P}-src.tar.bz2"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="x86 amd64"
+IUSE=""
+DEPEND=""
+RDEPEND=""
+
+S="${WORKDIR}/${PN}"
+
+src_prepare() {
+ epatch ${FILESDIR}/${P}-bigfiles.patch
+}
+
+src_install() {
+ mkdir -p "${D}/usr/bin"
+ cp "${S}/src/mdf2iso" "${D}/usr/bin"
+}
Please sign in to comment.
Something went wrong with that request. Please try again.