1 Only in mdf2iso/src: .deps
2 Only in mdf2iso.new/src: .kdbgrc.mdf2iso
3 diff -bur mdf2iso/src/Makefile.am mdf2iso.new/src/Makefile.am
4 --- mdf2iso/src/Makefile.am 2005-05-19 11:24:11.000000000 +0200
5 +++ mdf2iso.new/src/Makefile.am 2005-07-31 17:47:36.000000000 +0200
8 mdf2iso_SOURCES = mdf2iso.c
9 +AM_CFLAGS = -D_FILE_OFFSET_BITS=64 -Wall
10 diff -bur mdf2iso/src/Makefile.in mdf2iso.new/src/Makefile.in
11 --- mdf2iso/src/Makefile.in 2005-05-22 21:42:09.000000000 +0200
12 +++ mdf2iso.new/src/Makefile.in 2005-07-31 17:49:16.000000000 +0200
14 sysconfdir = @sysconfdir@
15 target_alias = @target_alias@
16 mdf2iso_SOURCES = mdf2iso.c
17 +AM_CFLAGS = -D_FILE_OFFSET_BITS=64 -Wall
25 - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
26 + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
28 - $(AUTOMAKE) --foreign src/Makefile
29 + $(AUTOMAKE) --gnu src/Makefile
31 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
33 diff -bur mdf2iso/src/mdf2iso.c mdf2iso.new/src/mdf2iso.c
34 --- mdf2iso/src/mdf2iso.c 2005-05-22 21:52:08.000000000 +0200
35 +++ mdf2iso.new/src/mdf2iso.c 2005-07-31 19:41:56.000000000 +0200
37 - /* $Id: mdf2iso.c, 22/05/05
38 +/* $Id: mdf2iso.c, 22/05/05
40 Copyright (C) 2004,2005 Salvatore Santagati <salvatore.santagati@gmail.com>
43 along with this program; if not, write to the
44 Free Software Foundation, Inc.,
45 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
54 -#define VERSION "0.3.0"
56 -/* Support Large File */
58 -#define _FILE_OFFSET_BITS 64
60 +#define VERSION "0.3.1"
63 const char SYNC_HEADER[12] = { (char) 0x00,
75 -toc_file (char *destfilename, int sub)
76 +int toc_file (char *destfilename, int sub)
78 - char destfiletoc[1024], destfiledat[1024];
83 - strcpy (destfiletoc, destfilename);
84 - strcpy (destfiledat, destfilename);
86 + destfiletoc=strdup(destfilename);
87 + destfiledat=strdup(destfilename);
88 strcpy (destfiletoc + strlen (destfilename) - 4, ".toc");
89 strcpy (destfiledat + strlen (destfilename) - 4, ".dat");
92 fprintf (ftoc, "// Track 1\n");
93 fprintf (ftoc, "TRACK MODE1_RAW");
96 - fprintf (ftoc, " RW_RAW\n");
99 - fprintf (ftoc, "\n");
100 + if (sub == 1) fprintf (ftoc, " RW_RAW\n");
101 + else fprintf (ftoc, "\n");
103 fprintf (ftoc, "NO COPY\n");
104 fprintf (ftoc, "DATAFILE \"%s\"\n", destfiledat);
105 @@ -114,26 +113,27 @@
109 - printf ("%s\n", strerror (errno));
110 - exit (EXIT_FAILURE);
111 + printf ("Error opening %s for output: %s\n",destfiletoc,strerror(errno));
121 -number_file (char *destfilename)
123 +int number_file (char *destfilename)
125 int i = 1, test_mdf = 0;
127 char mdf[2], destfilemdf[2354];
130 strcpy (destfilemdf, destfilename);
131 strcpy (destfilemdf + strlen (destfilename) - 1, ".0");
132 for (i = 0; test_mdf == 0; i++)
135 if ((fsource = fopen (destfilemdf, "rb")) != NULL)
138 printf ("\nCheck : ");
139 sprintf (mdf, "md%d", i);
140 @@ -141,203 +141,219 @@
141 printf ("%s, ", destfilemdf);
158 -cuesheets (char *destfilename)
159 +int cuesheets (char *destfilename)
161 - char destfilecue[1024], destfilebin[1024];
166 - strcpy (destfilecue, destfilename);
167 - strcpy (destfilebin, destfilename);
169 + destfilecue=strdup(destfilename);
170 + destfilebin=strdup(destfilename);
171 strcpy (destfilecue + strlen (destfilename) - 4, ".cue");
172 strcpy (destfilebin + strlen (destfilename) - 4, ".bin");
173 - fcue = fopen (destfilecue, "w");
174 + if ((fcue = fopen (destfilecue, "w"))!=NULL)
176 fprintf (fcue, "FILE \"%s\" BINARY\n", destfilebin);
177 fprintf (fcue, "TRACK 1 MODE1/2352\n");
178 fprintf (fcue, "INDEX 1 00:00:00\n");
179 rename (destfilename, destfilebin);
180 printf ("Create Cuesheets : %s\n", destfilecue);
185 + printf ("Error opening %s for output: %s\n",destfilecue,strerror(errno));
192 -main_percent (int percent_bar)
193 +int previous_percent=-1;
194 +void main_percent (int percent_bar)
195 +// Prints a progress bar, takes a percentage as argument.
197 - int progress_bar, progress_space;
198 + //int progress_bar, progress_space;
200 + if (percent_bar==previous_percent) return; // Nothing changed, don't waste CPU cycles.
202 + printf("%3d%% [:%.*s>%.*s:]\r",percent_bar,20-(percent_bar/5)," ",
203 + percent_bar/5,"====================");
205 printf ("%d%% [:", percent_bar);
206 - for (progress_bar = 1; progress_bar <= (int) (percent_bar / 5);
208 + for (progress_bar = 1; progress_bar <= (int) (percent_bar / 5); progress_bar++)
212 - for (progress_space = 0; progress_space < (20 - progress_bar);
215 + for (; progress_bar <= 20; ++progress_bar) printf (" ");
223 +// Prints the command line syntax
225 - printf ("mdf2iso v%s by Salvatore Santagati\n", VERSION);
226 - printf ("Web : http//mdf2iso.berlios.de\n");
227 - printf ("Email : salvatore.santagati@gmail.com\n");
228 - printf ("Irc : irc.freenode.net #ignus\n");
229 - printf ("Note : iodellavitanonhocapitouncazzo\n");
230 - printf ("License : released under the GNU GPL v2 or later\n\n");
231 + printf (" Web : http//mdf2iso.berlios.de\n");
232 + printf (" Email : salvatore.santagati@gmail.com\n");
233 + printf (" Irc : irc.freenode.net #ignus\n");
234 + printf (" Note : iodellavitanonhocapitouncazzo\n\n");
235 printf ("Usage :\n");
236 - printf ("mdf2iso [OPTION] [BASENAME.MDF] [DESTINATION]\n\n");
237 - printf ("OPTION\n");
238 - printf ("\t--toc Generate toc file\n");
239 - printf ("\t--cue Generate cue file\n");
240 - printf ("\t--help display this notice\n\n");
241 + printf ("mdf2iso [--cue|--toc|--help] <sourcefile> [destfile]\n\n");
242 + printf ("Options:\n");
243 + printf (" --toc Generate toc/dat files\n");
244 + printf (" --cue Generate cue/bin files\n");
245 + printf (" --help Display this notice\n");
246 + printf (" sourcefile\tFilename of the .mdf file to be converted\n");
247 + printf (" destfile\tFilename of the target ISO9660 file.\n"\
248 + "\t\tIf none given, one is derived from sourcefile.\n\n");
252 -main (int argc, char **argv)
253 +char mdftype(FILE *f)
260 + (see #defines above)
263 - int seek_ecc, sector_size, seek_head, sector_data, n_mdf;
266 + fseek(f, 32768, SEEK_SET);
267 + fread(buf, sizeof (char), 8, f);
268 + if (!memcmp (ISO_9660, buf, 8)) return ISO9660; // File is ISO9660
270 + fseek(f, 0L, SEEK_SET);
271 + fread(buf, sizeof (char), 12, f);
273 + fseek (f, 2352, SEEK_SET);
275 + if (!memcmp (SYNC_HEADER, buf, 12)) // Has SYNC_HEADER
277 + fread (buf, sizeof (char), 12, f);
278 + if (!memcmp (SYNC_HEADER_MDF, buf, 12)) return SYNC_MDF; // File is SYNC MDF
279 + if (!memcmp (SYNC_HEADER, buf, 12)) return SYNC; // File is SYNC
281 + else // Does not have SYNC_HEADER
283 + fread(buf, sizeof (char), 12, f);
284 + if (!memcmp (SYNC_HEADER_MDF_AUDIO, buf, 12)) return MDF_AUDIO; // File is MDF Audio
287 + // Reached a point where nothing else matters.
288 + return UNKNOWN; // Unknown format
292 +// === Main program code ===
294 +int main (int argc, char **argv)
296 + int seek_ecc, sector_size, seek_head, sector_data;//, n_mdf;
297 int cue = 0, cue_mode = 0, sub = 1, toc = 0, sub_toc = 0;
299 - double size_iso, write_iso;
301 - long i, source_length, progressbar;
302 - char buf[2448], destfilename[2354];
303 + long i, source_length;
305 + char *destfilename=NULL;
306 + char *basefilename=NULL;
307 FILE *fdest, *fsource;
309 + // Print identification
310 + printf ("mdf2iso v%s by Salvatore Santagati\n", VERSION);
311 + printf ("Licensed under GPL v2 or later\n");
315 + // *** Process command line options ***
320 - exit (EXIT_FAILURE);
321 + // Not enough parameters; print help
323 + exit(EXIT_FAILURE);
329 + // Search for options --cue and --toc
330 for (i = 0; i < argc; i++)
334 if (!strcmp (argv[i], "--help"))
340 if (!strcmp (argv[i], "--cue"))
346 if (!strcmp (argv[i], "--toc"))
354 - if ((cue == 1) && (toc == 1))
358 - exit (EXIT_FAILURE);
360 - if ((opts == 1) && (argc <= 2))
362 + // Catch impossible parameter combinations
363 + if (((cue == 1) && (toc == 1)) ||
364 + ((opts == 1) && (argc <= 2)))
367 - exit (EXIT_FAILURE);
369 + exit(EXIT_FAILURE);
372 + // Get the base filename
373 + basefilename=argv[1+opts]; // simple pointer, but makes life easier.
375 + // Get the destination filename
376 if (argc >= (3 + opts))
377 - strcpy (destfilename, argv[2 + opts]);
382 - strcpy (destfilename, argv[1 + opts]);
383 - if (strlen (argv[1 + cue]) < 5
384 - || strcmp (destfilename + strlen (argv[1 + opts]) - 4, ".mdf"))
385 - strcpy (destfilename + strlen (argv[1 + opts]), ".iso");
387 + // The destination filename is explicitly entered at the prompt
388 + destfilename=strdup(argv[2 + opts]);
390 - strcpy (destfilename + strlen (argv[1 + opts]) - 4, ".iso");
392 - if ((fsource = fopen (argv[1 + opts], "rb")) != NULL)
395 - fseek (fsource, 32768, SEEK_CUR);
396 - fread (buf, sizeof (char), 8, fsource);
397 - if (memcmp (ISO_9660, buf, 8))
399 + // Derive destination filename from the basename:
400 + // If basename is "*.mdf" use "*.iso" als destname
401 + // otherwise simply append ".iso" to the basename to create destname.
402 + destfilename=strdup(basefilename);
403 + i=strlen(destfilename); // Reusing 'i' here as temporary variable
404 + if (i < 5 || strcmp(destfilename + i - 4, ".mdf"))
406 - fseek (fsource, 0L, SEEK_SET);
407 - fread (buf, sizeof (char), 12, fsource);
408 - if (!memcmp (SYNC_HEADER, buf, 12))
411 - fseek (fsource, 0L, SEEK_SET);
412 - fseek (fsource, 2352, SEEK_CUR);
413 - fread (buf, sizeof (char), 12, fsource);
414 - if (!memcmp (SYNC_HEADER_MDF, buf, 12))
421 - /* BAD SECTOR TO NORMAL IMAGE */
423 - sector_size = 2448;
424 - sector_data = 2352;
434 - sector_size = 2448;
435 - sector_data = 2048;
437 + destfilename=realloc(destfilename,i+5);
438 + strcat(destfilename, ".iso");
447 - sector_size = 2448;
448 - sector_data = 2448;
452 + strcpy(destfilename + i - 3, "iso");
456 + // *** Preprocess basefile ***
458 + // Try opening basefile
459 + if ((fsource = fopen(basefilename, "rb")) == NULL)
461 - if (!memcmp (SYNC_HEADER, buf, 12))
462 + free(destfilename);
463 + printf ("Could not open %s: %s\n", basefilename, strerror(errno));
464 + exit (EXIT_FAILURE);
467 + // Determine filetype & set some stuff accordingly (or exit)
468 + switch (mdftype(fsource))
471 + printf("%s is already ISO9660.\n",basefilename);
473 + free(destfilename);
474 + exit(EXIT_SUCCESS);
479 @@ -348,129 +364,134 @@
506 - printf ("Sorry I don't know this format :(\n");
507 - exit (EXIT_FAILURE);
518 - fseek (fsource, 0L, SEEK_SET);
519 - fseek (fsource, 2352, SEEK_CUR);
520 - fread (buf, sizeof (char), 12, fsource);
521 - if (memcmp (SYNC_HEADER_MDF_AUDIO, buf, 12))
524 + /* BAD SECTOR TO NORMAL IMAGE */
526 + sector_size = 2448;
527 + sector_data = 2352;
532 - printf ("Sorry I don't know this format :(\n");
533 - exit (EXIT_FAILURE);
536 + sector_size = 2448;
537 + sector_data = 2048;
547 + sector_size = 2448;
548 + sector_data = 2448;
554 /*BAD SECTOR AUDIO */
561 + default:printf("Unknown format for %s.\n",basefilename);
563 + free(destfilename);
564 + exit (EXIT_FAILURE);
567 - if ((fdest = fopen (destfilename, "wb")) != NULL);
570 + // *** Create destination file ***
572 + // Try opening the destination file for output
573 + if ((fdest = fopen (destfilename, "wb")) == NULL)
575 - printf ("%s\n", strerror (errno));
576 + printf ("Unable to open %s for output: %s\n",destfilename,strerror(errno));
577 + free(destfilename);
584 fseek (fsource, 0L, SEEK_END);
585 source_length = ftell (fsource) / sector_size;
586 - size_iso = (int) (source_length * sector_data);
587 - progressbar = 100 / source_length;
588 fseek (fsource, 0L, SEEK_SET);
591 for (i = 0; i < source_length; i++)
594 fseek (fsource, seek_head, SEEK_CUR);
595 - if (fread (buf, sizeof (char), sector_data, fsource));
598 + if (fread(buf, sizeof (char), sector_data, fsource)!=sector_data)
600 - printf ("%s\n", strerror (errno));
601 + printf ("Error reading from %s: %s\n",basefilename, strerror (errno));
604 + remove(destfilename);
605 + free(destfilename);
608 - if (fwrite (buf, sizeof (char), sector_data, fdest));
612 + if (fwrite (buf, sizeof (char), sector_data, fdest)!=sector_data)
614 - printf ("%s\n", strerror (errno));
615 + printf ("Error writing to %s: %s\n",destfilename, strerror (errno));
618 + remove(destfilename);
619 + free(destfilename);
623 fseek (fsource, seek_ecc, SEEK_CUR);
624 - write_iso = (int) (sector_data * i);
626 - percent = (int) (write_iso * 100 / size_iso);
627 - main_percent (percent);
628 - }} printf ("100%%[:====================:]\n");
629 + main_percent(i*100/source_length);
631 + } printf ("100%% [:=====================:]\n");
637 - cuesheets (destfilename);
639 - toc_file (destfilename, sub_toc);
640 + // *** create Toc or Cue file is requested ***
641 + if (cue == 1) if (cuesheets(destfilename))
643 + free(destfilename);
644 + exit(EXIT_FAILURE);
646 + if (toc == 1) if (toc_file(destfilename, sub_toc))
648 + free(destfilename);
649 + exit(EXIT_FAILURE);
651 if ((toc == 0) && (cue == 0))
652 - printf ("Create iso9660: %s\n", destfilename);
653 + printf("Created iso9660: %s\n", destfilename);
655 + free(destfilename);
661 - printf ("This is file iso9660 ;)\n");
663 n_mdf = number_file (destfilename) - 1;
668 printf ("\rDetect %d md* file and now emerge this\n", n_mdf);
673 - exit (EXIT_SUCCESS);
678 - printf ("%s\n", strerror (errno));
679 - exit (EXIT_FAILURE);
682 + exit (EXIT_SUCCESS);*/