diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index dc01c957..45401d5c 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -3222,7 +3222,7 @@ namespace SabreTools.Library.DatFiles FileName = (String.IsNullOrWhiteSpace(FileName) ? (keepext ? Path.GetFileName(filename) : Path.GetFileNameWithoutExtension(filename)) : FileName); // If the output type isn't set already, get the internal output type - DatFormat = (DatFormat == 0 ? Utilities.GetDatFormat(filename) : DatFormat); + DatFormat = (DatFormat == 0 ? Utilities.GetDatFormatFromFile(filename) : DatFormat); // Now parse the correct type of DAT try diff --git a/SabreTools.Library/Tools/Utilities.cs b/SabreTools.Library/Tools/Utilities.cs index 91475ae1..4d484c40 100644 --- a/SabreTools.Library/Tools/Utilities.cs +++ b/SabreTools.Library/Tools/Utilities.cs @@ -595,7 +595,7 @@ namespace SabreTools.Library.Tools /// DatFile of the specific internal type that corresponds to the inputs public static DatFile GetDatFile(string input, DatFile baseDat) { - DatFormat datFormat = GetDatFormat(input); + DatFormat datFormat = GetDatFormatFromFile(input); return GetDatFile(datFormat, baseDat); } @@ -681,6 +681,69 @@ namespace SabreTools.Library.Tools } } + /// + /// Get DatFormat value from input string + /// + /// String to get value from + /// DatFormat value corresponding to the string + public static DatFormat GetDatFormat(string input) + { + switch (input?.ToLowerInvariant()) + { + case "all": + return DatFormat.ALL; + case "am": + case "attractmode": + return DatFormat.AttractMode; + case "cmp": + case "clrmamepro": + return DatFormat.ClrMamePro; + case "csv": + return DatFormat.CSV; + case "dc": + case "doscenter": + return DatFormat.DOSCenter; + case "lr": + case "listrom": + return DatFormat.Listrom; + case "lx": + case "listxml": + return DatFormat.Listxml; + case "miss": + case "missfile": + return DatFormat.MissFile; + case "md5": + return DatFormat.RedumpMD5; + case "ol": + case "offlinelist": + return DatFormat.OfflineList; + case "rc": + case "romcenter": + return DatFormat.RomCenter; + case "sd": + case "sabredat": + return DatFormat.SabreDat; + case "sfv": + return DatFormat.RedumpSFV; + case "sha1": + return DatFormat.RedumpSHA1; + case "sha256": + return DatFormat.RedumpSHA256; + case "sha384": + return DatFormat.RedumpSHA384; + case "sha512": + return DatFormat.RedumpSHA512; + case "sl": + case "softwarelist": + return DatFormat.SoftwareList; + case "xml": + case "logiqx": + return DatFormat.Logiqx; + default: + return DatFormat.Logiqx; // TODO: Placeholder until DatFormat.None + } + } + /// /// Get ForceMerging value from input string /// @@ -1048,7 +1111,7 @@ namespace SabreTools.Library.Tools /// /// Name of the file to be parsed /// The DatFormat corresponding to the DAT - public static DatFormat GetDatFormat(string filename) + public static DatFormat GetDatFormatFromFile(string filename) { // Limit the output formats based on extension if (!HasValidDatExtension(filename)) diff --git a/SabreTools/SabreTools.Help.cs b/SabreTools/SabreTools.Help.cs index f23cf773..e6138762 100644 --- a/SabreTools/SabreTools.Help.cs +++ b/SabreTools/SabreTools.Help.cs @@ -1616,6 +1616,26 @@ namespace SabreTools }); } } + private static Feature outputTypeListInput + { + get + { + return new Feature( + new List() { "-ot", "--output-type" }, + "Output DATs to a given type or types", + FeatureType.List, + new List() + { + " Supported values are:", + " all, am/attractmode, cmp/clrmamepro, csv,", + " dc/doscenter, lr/listrom, lx/listxml,", + " miss/missfile, md5, ol/offlinelist,", + " rc/romcenter, sd/sabredat, sfv, sha1,", + " sha256, sha384, sha512, sl/softwarelist", + " xml/logiqx", + }); + } + } private static Feature sha1ListInput { get diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index 916ba9c0..d733f8ae 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -388,7 +388,7 @@ namespace SabreTools if ((datHeader.DatFormat & DatFormat.LogiqxDepreciated) == 0) { datHeader.DatFormat |= DatFormat.Logiqx; - } + } break; case "quick": quickScan = true; @@ -652,6 +652,17 @@ namespace SabreTools filter.NotItemStatuses |= Utilities.GetItemStatus(nstat); } break; + case "output-type": + foreach (string ot in (List)feat.Value.GetValue()) + { + DatFormat dftemp = Utilities.GetDatFormat(ot); + if (dftemp != DatFormat.Logiqx + || (dftemp == DatFormat.Logiqx && (datHeader.DatFormat & DatFormat.LogiqxDepreciated) == 0)) + { + datHeader.DatFormat |= dftemp; + } + } + break; case "sha1": filter.SHA1s.AddRange((List)feat.Value.GetValue()); break;