diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index 829c5314..682f0e73 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -226,7 +226,7 @@ namespace SabreTools.Helper helptext.Add(" -sha1=, --sha1= Filter by SHA-1 hash"); helptext.Add(" -is=, --status= Include only items with a given status"); helptext.Add(" Supported values are:"); - helptext.Add(" None, Good, BadDump, Nodump, Verified"); + helptext.Add(" None, Good, BadDump, Nodump, Verified, NotNodump"); helptext.Add(" -out= Output directory (overridden by --inplace)"); helptext.Add(""); helptext.Add("Filenames and directories can't start with a reserved string"); diff --git a/SabreTools.Helper/Data/Enums.cs b/SabreTools.Helper/Data/Enums.cs index 20cfd061..8249b2dd 100644 --- a/SabreTools.Helper/Data/Enums.cs +++ b/SabreTools.Helper/Data/Enums.cs @@ -88,12 +88,13 @@ /// public enum ItemStatus { - NULL = -1, + NULL = -1, // This is a fake flag that is used for filter only None = 0, Good = 1, BadDump = 2, Nodump = 3, Verified = 4, + NotNodump = 5, // This is a fake flag that is used for filter only } #endregion diff --git a/SabreTools.Helper/Objects/Dat/DatFile.cs b/SabreTools.Helper/Objects/Dat/DatFile.cs index c51fbf2a..c7a35a1e 100644 --- a/SabreTools.Helper/Objects/Dat/DatFile.cs +++ b/SabreTools.Helper/Objects/Dat/DatFile.cs @@ -819,8 +819,30 @@ namespace SabreTools.Helper { continue; } - // Special case for itemStatus... - else if (gc[i] == "itemStatus" && attrib != "status" && attrib != "flags") + // Special cases for item statuses + else if (gc[i] == "good" && attrib != "status" && attrib != "flags") + { + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.Good; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.Good; + } + } + else if (gc[i] == "baddump" && attrib != "status" && attrib != "flags") + { + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.BadDump; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.BadDump; + } + } + else if (gc[i] == "nodump" && attrib != "status" && attrib != "flags") { if (item.Type == ItemType.Rom) { @@ -831,6 +853,17 @@ namespace SabreTools.Helper ((Disk)item).ItemStatus = ItemStatus.Nodump; } } + else if (gc[i] == "verified" && attrib != "status" && attrib != "flags") + { + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.Verified; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.Verified; + } + } // Even number of quotes, not in a quote, not in attribute else if (Regex.Matches(gc[i], "\"").Count % 2 == 0 && !quote && attrib == "") { @@ -934,6 +967,48 @@ namespace SabreTools.Helper } i++; break; + + // Special cases for item statuses + case "good": + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.Good; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.Good; + } + break; + case "baddump": + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.BadDump; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.BadDump; + } + break; + case "nodump": + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.Nodump; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.Nodump; + } + break; + case "verified": + if (item.Type == ItemType.Rom) + { + ((Rom)item).ItemStatus = ItemStatus.Verified; + } + else if (item.Type == ItemType.Disk) + { + ((Disk)item).ItemStatus = ItemStatus.Verified; + } + break; } attrib = ""; diff --git a/SabreTools.Helper/Objects/Dat/DatItem.cs b/SabreTools.Helper/Objects/Dat/DatItem.cs index d42067f0..cc720016 100644 --- a/SabreTools.Helper/Objects/Dat/DatItem.cs +++ b/SabreTools.Helper/Objects/Dat/DatItem.cs @@ -261,9 +261,16 @@ namespace SabreTools.Helper Rom rom = (Rom)itemdata; // Filter on status - if (itemStatus != ItemStatus.NULL && rom.ItemStatus != itemStatus) + if (itemStatus != ItemStatus.NULL) { - return false; + if (itemStatus == ItemStatus.NotNodump && rom.ItemStatus == ItemStatus.Nodump) + { + return false; + } + else if (itemStatus != ItemStatus.NotNodump && rom.ItemStatus != itemStatus) + { + return false; + } } // Filter on rom size diff --git a/SabreTools.Helper/README.1ST b/SabreTools.Helper/README.1ST index 272b3123..06d0cc0c 100644 --- a/SabreTools.Helper/README.1ST +++ b/SabreTools.Helper/README.1ST @@ -553,7 +553,7 @@ Options: -is=, status= Include only items with a given status Include items with one of the supported values: - None, Good, BadDump, Nodump, Verified + None, Good, BadDump, Nodump, Verified, NotNodump -out= Set the name of the output directory This sets an output folder to be used when the files are created. If a path diff --git a/SabreTools/Partials/SabreTools_Inits.cs b/SabreTools/Partials/SabreTools_Inits.cs index 2aeb98ae..9511638f 100644 --- a/SabreTools/Partials/SabreTools_Inits.cs +++ b/SabreTools/Partials/SabreTools_Inits.cs @@ -513,6 +513,9 @@ namespace SabreTools case "verified": itemStatus = ItemStatus.Verified; break; + case "notnodump": + itemStatus = ItemStatus.NotNodump; + break; } // Normalize the extensions diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index 45d35d21..8a5b0b53 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -216,10 +216,18 @@ namespace SabreTools case "--merge": merge = true; break; + case "-nd": + case "--nodump": + status = "Nodump"; + break; case "-nm": case "--noMD5": noMD5 = true; break; + case "-nnd": + case "--not-nodump": + status = "NotNodump"; + break; case "-ns": case "--noSHA1": noSHA1 = true;