Пример #1
0
        private static GDBuilder CreateBuilderInstance(string[] args)
        {
            if (args.Length == 0)
            {
                PrintUsage();
                return(null);
            }

            // Initialize the GDBuilder
            GDBuilder builder = new GDBuilder();

            builder.ReportProgress += ConsoleProgressReport;

            // Handle the output parameter
            // This one is complex so it deserve a specific method...
            string parseOutputMessage = ParseOutput(builder, args);

            if (!string.IsNullOrEmpty(parseOutputMessage))
            {
                Console.Error.WriteLine(parseOutputMessage);
                return(null);
            }

            builder.ImageDescriptorFileName = CommandLineHelper.GetSoloArgument(args, "o", "gdi");
            builder.RawMode = CommandLineHelper.HasArgument(args, "r", "raw");
//            builder.TruncateData = CommandLineHelper.HasArgument(args, "t", "truncate");

            // Single Density Area
            builder.SingleDensityArea.BootstrapFilePath   = CommandLineHelper.GetSoloArgument(args, "b", "ip-sda");;
            builder.SingleDensityArea.SourceDataDirectory = CommandLineHelper.GetSoloArgument(args, "i", "input-sda");
            builder.SingleDensityArea.AudioTrackFileName  = CommandLineHelper.GetSoloArgument(args, "g", "gdda-sda");

            // High Density Area
            builder.HighDensityArea.BootstrapFilePath   = CommandLineHelper.GetSoloArgument(args, "b", "ip");
            builder.HighDensityArea.SourceDataDirectory = CommandLineHelper.GetSoloArgument(args, "i", "input");
            builder.HighDensityArea.AudioTrackFileNames.AddRange(CommandLineHelper.GetMultiArgument(args, "g", "gdda"));

            // Volume Name
            if (CommandLineHelper.HasArgument(args, "v", "volume-name"))
            {
                builder.PrimaryVolumeDescriptor.VolumeIdentifier = CommandLineHelper.GetSoloArgument(args, "v", "volume-name");
            }

            // Additional PVD
            builder.PrimaryVolumeDescriptor.ApplicationIdentifier  = "GD WORKSHOP COPYRIGHT CROSS PRODUCTS 1998";
            builder.PrimaryVolumeDescriptor.DataPreparerIdentifier = "CPL GDWORKSHOP VERSION 2_7_0F FIRM WARE VERSION 2_7_0C";

            if (!CheckArguments(builder))
            {
                return(null);
            }

            return(builder);
        }
Пример #2
0
        static int Main(string[] args)
        {
            WriteHeader();
            GDBuilder builder = CreateBuilderInstance(args);

            if (builder != null)
            {
                Console.Write("Writing");
                builder.Execute();
                Console.WriteLine(" Done!");
                return(0);
            }
            return(1);
        }
Пример #3
0
        private static string ParseOutput(GDBuilder builder, string[] args)
        {
            List <string> output = CommandLineHelper.GetMultiArgument(args, "o", "output");

            if (output.Count == 0)
            {
                return("No output specified");
            }
            if (output.Count > 2)
            {
                return("Too many output specified.");
            }
            else if (output.Count == 2)
            {
                if (!Path.HasExtension(output[0]) || !Path.HasExtension(output[1]))
                {
                    return("Output filenames are not valid!");
                }

                // Two valid files provided: it's a splitted data track (so we should have GDDA)
                builder.HighDensityArea.DataTrackFirstFileName = output[0];
                builder.HighDensityArea.DataTrackLastFileName  = output[1];
            }
            else if (output.Count == 1)
            {
                string outputPath = output[0];
                if (outputPath.EndsWith(Path.DirectorySeparatorChar.ToString()) || !Path.HasExtension(outputPath))
                {
                    // It's a directory
                    builder.OutputDirectory = outputPath;
                }
                else
                {
                    // It's a file only
                    builder.HighDensityArea.DataTrackFirstFileName = outputPath;
                }
            }

            return(string.Empty);
        }
Пример #4
0
        private static bool CheckArguments(GDBuilder builder)
        {
            if (!Directory.Exists(builder.HighDensityArea.SourceDataDirectory))
            {
                Console.WriteLine("The specified data directory does not exist!");
                return(false);
            }

            if (!File.Exists(builder.HighDensityArea.BootstrapFilePath))
            {
                Console.WriteLine("The specified IP.BIN file does not exist!");
                return(false);
            }

            foreach (string track in builder.HighDensityArea.AudioTrackFileNames)
            {
                if (!File.Exists(track) && !File.Exists(Path.Combine(builder.OutputDirectory, track)))
                {
                    Console.WriteLine("The GDDA track " + track + " does not exist!");
                    return(false);
                }
            }

            if (builder.HighDensityArea.AudioTrackFileNames.Count > 0 && !string.IsNullOrEmpty(builder.HighDensityArea.DataTrackLastFileName))
            {
                Console.WriteLine("Can't output a single track when CDDA is specified.");
                return(false);
            }

            /*if (truncate && fileOutput)
             * {
             *  Console.WriteLine("Can't output a single data track in truncated data mode.");
             *  Console.WriteLine("Please provide two different output tracks.");
             *  return false;
             * }
             */

            return(true);
        }
Пример #5
0
 public GDIBuilderForm()
 {
     InitializeComponent();
     _builder = new GDBuilder();
 }