diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index eccff642..485b04f5 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -172,6 +172,7 @@ namespace SabreTools.Helper helptext.Add(" -o, --old Output DAT in CMP format instead of XML"); helptext.Add(" -he, --headerer Extract and remove copier headers"); helptext.Add(" -r, --restore Restore header to file based on SHA-1 instead"); + helptext.Add(" -out= Output directory"); helptext.Add(" -hs, --hash-split Split a DAT or folder by best-available hashes"); helptext.Add(" -out= Output directory"); helptext.Add(" -i, --import Start tool in import mode"); diff --git a/SabreTools.Helper/Objects/Headerer.cs b/SabreTools.Helper/Objects/Headerer.cs index 28a0bc2e..2e75ef26 100644 --- a/SabreTools.Helper/Objects/Headerer.cs +++ b/SabreTools.Helper/Objects/Headerer.cs @@ -14,6 +14,7 @@ namespace SabreTools // Private instance variables private List _inputs; private bool _restore; + private string _outdir; private Logger _logger; // Private required variables @@ -26,11 +27,13 @@ namespace SabreTools /// /// Input file or folder names /// False if we're extracting headers (default), true if we're restoring them + /// Output directory to write new files to, blank defaults to rom folder /// Logger object for file and console output - public Headerer(List inputs, bool restore, Logger logger) + public Headerer(List inputs, bool restore, string outdir, Logger logger) { _inputs = inputs; _restore = restore; + _outdir = outdir; _logger = logger; } @@ -121,7 +124,7 @@ namespace SabreTools } // Otherwise, apply the rule to the file - string newfile = file + ".new"; + string newfile = (_outdir == "" ? Path.GetFullPath(file) + ".new" : Path.Combine(_outdir, Path.GetFileName(file))); Skippers.TransformFile(file, newfile, rule, _logger); // If the output file doesn't exist, return false @@ -207,8 +210,10 @@ namespace SabreTools _logger.Log("Found match with rom type " + sldr.GetString(1)); header = sldr.GetString(0); - _logger.User("Creating reheadered file: " + file + ".new" + sub); - FileTools.AppendBytesToFile(file, file + ".new" + sub, header, string.Empty); + _logger.User("Creating reheadered file: " + + (_outdir == "" ? Path.GetFullPath(file) + ".new" : Path.Combine(_outdir, Path.GetFileName(file))) + sub); + FileTools.AppendBytesToFile(file, + (_outdir == "" ? Path.GetFullPath(file) + ".new" : Path.Combine(_outdir, Path.GetFileName(file))) + sub, header, string.Empty); _logger.User("Reheadered file created!"); } } diff --git a/SabreTools.Helper/README.1ST b/SabreTools.Helper/README.1ST index 62d531cd..adaa6898 100644 --- a/SabreTools.Helper/README.1ST +++ b/SabreTools.Helper/README.1ST @@ -399,6 +399,10 @@ Options: to reapply them to files if they match the included hash. More than one header can be applied to a file, so they will be output to new files, suffixed with .newX, where X is a number. No input files are altered in the process. + + -out= Set the name of the output directory + This sets an output folder to be used when the files are created. If a path + is not defined, the application directory is used instead. -hs, --hash-split Split a DAT or folder by best-available hashes For a DAT, or set of DATs, allow for splitting based on the best available hash for diff --git a/SabreTools.Helper/Skippers/Skippers.cs b/SabreTools.Helper/Skippers/Skippers.cs index 523c830b..a0aa191e 100644 --- a/SabreTools.Helper/Skippers/Skippers.cs +++ b/SabreTools.Helper/Skippers/Skippers.cs @@ -465,8 +465,7 @@ namespace SabreTools.Helper if (success) { logger.User(" Matching rule found!"); - skipperRule = rule; - break; + return rule; } } } diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs index efe35f71..af1e27a4 100644 --- a/SabreTools/Partials/SabreTools_Inits.cs +++ b/SabreTools/Partials/SabreTools_Inits.cs @@ -319,10 +319,11 @@ namespace SabreTools /// /// Input file or folder names /// False if we're extracting headers (default), true if we're restoring them + /// Output directory to write new files to, blank defaults to rom folder /// Logger object for file and console output - private static void InitHeaderer(List inputs, bool restore, Logger logger) + private static void InitHeaderer(List inputs, bool restore, string outdir, Logger logger) { - Headerer headerer = new Headerer(inputs, restore, logger); + Headerer headerer = new Headerer(inputs, restore, outdir, logger); headerer.Process(); } diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index 1d636a66..8a54b125 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -713,7 +713,7 @@ namespace SabreTools // If we're in headerer mode else if (headerer) { - InitHeaderer(inputs, restore, _logger); + InitHeaderer(inputs, restore, outdir, _logger); } // Import a file or folder diff --git a/SimpleSort/SimpleSort.cs b/SimpleSort/SimpleSort.cs index a59c401d..9b424d6f 100644 --- a/SimpleSort/SimpleSort.cs +++ b/SimpleSort/SimpleSort.cs @@ -517,7 +517,7 @@ namespace SabreTools } // Try to find the matches to the file that was found - List foundroms = RomTools.GetDuplicates(rom, _datdata, _logger, true); + List foundroms = RomTools.GetDuplicates(rom, _datdata, _logger); _logger.Log("File '" + input + "' had " + foundroms.Count + " matches in the DAT!"); foreach (Rom found in foundroms) { @@ -583,7 +583,7 @@ namespace SabreTools } // Try to find the matches to the file that was found - List founddroms = RomTools.GetDuplicates(drom, _datdata, _logger, true); + List founddroms = RomTools.GetDuplicates(drom, _datdata, _logger); _logger.Log("File '" + newinput + "' had " + founddroms.Count + " matches in the DAT!"); foreach (Rom found in founddroms) { @@ -706,7 +706,7 @@ namespace SabreTools foreach (Rom rom in internalRomData) { // Try to find the matches to the file that was found - List foundroms = RomTools.GetDuplicates(rom, _datdata, _logger, true); + List foundroms = RomTools.GetDuplicates(rom, _datdata, _logger); _logger.Log("File '" + rom.Name + "' had " + foundroms.Count + " matches in the DAT!"); foreach (Rom found in foundroms) {