diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index c9fc78b5..68b6fd07 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -198,6 +198,7 @@ namespace SabreTools.Helper helptext.Add(" -q, --quotes Put double-quotes around each item"); helptext.Add(" -ae=, --add-ext= Add an extension to each item"); helptext.Add(" -re=, --rep-ext= Replace all extensions with specified"); + helptext.Add(" -rme, --rem-ext Remove all extensions from each item"); helptext.Add(" -ro, --romba Output in Romba format (requires SHA-1)"); helptext.Add(" -tsv, --tsv Output in Tab-Separated Value format"); helptext.Add(" -csv, --csv Output in Comma-Separated Value format"); diff --git a/SabreTools.Helper/Data/Structs.cs b/SabreTools.Helper/Data/Structs.cs index 7a0e25a0..75ba7b2b 100644 --- a/SabreTools.Helper/Data/Structs.cs +++ b/SabreTools.Helper/Data/Structs.cs @@ -329,6 +329,7 @@ namespace SabreTools.Helper public bool Quotes; public string RepExt; public string AddExt; + public bool RemExt; public bool GameName; public bool Romba; public bool? XSV; // true for tab-deliminated output, false for comma-deliminated output diff --git a/SabreTools.Helper/README.1ST b/SabreTools.Helper/README.1ST index 8c5deaf6..d5870bbf 100644 --- a/SabreTools.Helper/README.1ST +++ b/SabreTools.Helper/README.1ST @@ -496,6 +496,14 @@ Options: -post=, --postfix= Set postfix for all lines Set a generic postfix to be appended to all outputted lines + + Both prefix and postfix can use one of the following special strings: + - %game% - Replaced with the Game/Machine name + - %name% - Replaced with the Rom name + - %crc% - Replaced with the CRC + - %md5% - Replaced with the MD5 + - %sha1% - Replaced with the SHA-1 + - %size% - Replaced with the size -q, --quotes Put double-quotes around each item This quotes only the item and not the prefix and postfix @@ -505,6 +513,9 @@ Options: -re=, --rep-ext= Replace all extensions with specified When an extension exists, replace it with the provided instead + + -rme, --rem-ext Remove all extensions from all items + For each item, the extension is removed -ro, --romba Output in Romba format (requires SHA-1) Instead of outputting the game or rom name, output the SHA-1 of the files diff --git a/SabreTools.Helper/Tools/DatTools.cs b/SabreTools.Helper/Tools/DatTools.cs index 22c216a6..de433d67 100644 --- a/SabreTools.Helper/Tools/DatTools.cs +++ b/SabreTools.Helper/Tools/DatTools.cs @@ -2496,9 +2496,9 @@ namespace SabreTools.Helper // Create a dictionary of all ROMs from the input DATs Dat userData; - List datHeaders = PopulateUserData(newInputFileNames, inplace, clean, softlist, + List datHeaders = PopulateUserDataParallel(newInputFileNames, inplace, clean, softlist, outputDirectory, datdata, out userData, gamename, romname, romtype, sgt, slt, seq, - crc, md5, sha1, nodump, trim, single, root, logger); + crc, md5, sha1, nodump, trim, single, root, maxDegreeOfParallelism, logger); // Modify the Dictionary if necessary and output the results if (diff != 0 && cascade == null) @@ -3129,8 +3129,20 @@ namespace SabreTools.Helper string post = (datdata.Quotes ? "\"" : "") + datdata.Postfix; // Check for special strings in prefix and postfix - pre = pre.Replace("%crc%", rom.HashData.CRC).Replace("%md5%", rom.HashData.MD5).Replace("%sha1%", rom.HashData.SHA1).Replace("%size%", rom.HashData.Size.ToString()); - post = post.Replace("%crc%", rom.HashData.CRC).Replace("%md5%", rom.HashData.MD5).Replace("%sha1%", rom.HashData.SHA1).Replace("%size%", rom.HashData.Size.ToString()); + pre = pre + .Replace("%game%", rom.Machine.Name) + .Replace("%name%", rom.Name) + .Replace("%crc%", rom.HashData.CRC) + .Replace("%md5%", rom.HashData.MD5) + .Replace("%sha1%", rom.HashData.SHA1) + .Replace("%size%", rom.HashData.Size.ToString()); + post = post + .Replace("%game%", rom.Machine.Name) + .Replace("%name%", rom.Name) + .Replace("%crc%", rom.HashData.CRC) + .Replace("%md5%", rom.HashData.MD5) + .Replace("%sha1%", rom.HashData.SHA1) + .Replace("%size%", rom.HashData.Size.ToString()); // If we're in Romba mode, the state is consistent if (datdata.Romba) @@ -3163,8 +3175,13 @@ namespace SabreTools.Helper else { string name = (datdata.UseGame ? rom.Machine.Name : rom.Name); - if (datdata.RepExt != "") + if (datdata.RepExt != "" || datdata.RemExt) { + if (datdata.RemExt) + { + datdata.RepExt = ""; + } + string dir = Path.GetDirectoryName(name); dir = (dir.StartsWith(Path.DirectorySeparatorChar.ToString()) ? dir.Remove(0, 1) : dir); name = Path.Combine(dir, Path.GetFileNameWithoutExtension(name) + datdata.RepExt); diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs index f13e40c4..420dd4f1 100644 --- a/SabreTools/Partials/SabreTools_Inits.cs +++ b/SabreTools/Partials/SabreTools_Inits.cs @@ -101,6 +101,7 @@ namespace SabreTools /// Add quotes to each item /// Replace all extensions with another /// Add an extension to all items + /// Remove all extensions /// Add the dat name as a directory prefix /// Output files in romba format /// True to output files in TSV format, false to output files in CSV format, null otherwise @@ -161,6 +162,7 @@ namespace SabreTools bool quotes, string repext, string addext, + bool remext, bool datprefix, bool romba, bool? tsv, @@ -311,6 +313,7 @@ namespace SabreTools Quotes = quotes, RepExt = repext, AddExt = addext, + RemExt = remext, GameName = datprefix, Romba = romba, XSV = tsv, diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index dde6a9a2..9004a9a7 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -105,6 +105,7 @@ namespace SabreTools old = false, quotes = false, rem = false, + remext = false, romba = false, single = false, softlist = false, @@ -367,6 +368,10 @@ namespace SabreTools case "--remove": rem = true; break; + case "-rme": + case "--rem-ext": + remext = true; + break; case "-ro": case "--romba": romba = true; @@ -670,7 +675,7 @@ namespace SabreTools { InitUpdate(inputs, filename, name, description, rootdir, category, version, date, author, email, homepage, url, comment, header, superdat, forcemerge, forcend, forcepack, outputFormat, usegame, prefix, - postfix, quotes, repext, addext, datprefix, romba, tsv, merge, diffMode, cascade, inplace, skip, bare, gamename, romname, + postfix, quotes, repext, addext, remext, datprefix, romba, tsv, merge, diffMode, cascade, inplace, skip, bare, gamename, romname, romtype, sgt, slt, seq, crc, md5, sha1, nodump, trim, single, root, outdir, clean, softlist, dedup, maxParallelism); }