using System; using System.Collections.Generic; using System.IO; using SabreTools.Helper; namespace SabreTools { public class DatSplit { // Instance variables private static string _extA; private static string _extB; private static string _filename; private static Logger _logger; /// /// Create a new DatSplit object /// /// Filename of the DAT to split /// First extension to split on /// Second extension to split on /// Logger object for console and file writing public DatSplit(string filename, string extA, string extB, Logger logger) { _filename = filename.Replace("\"", ""); _extA = (extA.StartsWith(".") ? extA : "." + extA).ToUpperInvariant(); _extB = (extB.StartsWith(".") ? extB : "." + extB).ToUpperInvariant(); _logger = logger; } public static void Main(string[] args) { Console.Clear(); // Credits take precidence over all if ((new List(args)).Contains("--credits")) { Build.Credits(); return; } // If we don't have arguments, show help if (args.Length == 0 && args.Length != 3) { Build.Help(); return; } Logger logger = new Logger(false, "datsplit.log"); logger.Start(); // Output the title Build.Start("DatSplit"); // Set needed variables _filename = args[0]; _extA = (args[1].StartsWith(".") ? args[1] : "." + args[1]).ToUpperInvariant(); _extB = (args[2].StartsWith(".") ? args[2] : "." + args[2]).ToUpperInvariant(); // Split the DAT DatSplit ds = new DatSplit(_filename, _extA, _extB, logger); ds.Split(); logger.Close(); } /// /// Split a DAT based on filtering by 2 extensions /// public void Split() { List romsA = new List(); List romsB = new List(); // Load the current DAT to be processed List roms = RomManipulation.Parse(_filename, 0, 0, _logger); // Now separate the roms accordingly foreach (RomData rom in roms) { if (rom.Name.ToUpperInvariant().EndsWith(_extA)) { romsA.Add(rom); } else if (rom.Name.ToUpperInvariant().EndsWith(_extB)) { romsB.Add(rom); } else { romsA.Add(rom); romsB.Add(rom); } } // Then write out both files Output.WriteToDat(Path.GetFileNameWithoutExtension(_filename) + "." + _extA, Path.GetFileNameWithoutExtension(_filename) + "." + _extA, "", "", "", "", false, !RomManipulation.IsXmlDat(_filename), "", romsA, _logger); Output.WriteToDat(Path.GetFileNameWithoutExtension(_filename) + "." + _extB, Path.GetFileNameWithoutExtension(_filename) + "." + _extB, "", "", "", "", false, !RomManipulation.IsXmlDat(_filename), "", romsB, _logger); } } }