diff --git a/SabreTools.Core/Tools/Converters.cs b/SabreTools.Core/Tools/Converters.cs
index bb4c10bd..1e08106e 100644
--- a/SabreTools.Core/Tools/Converters.cs
+++ b/SabreTools.Core/Tools/Converters.cs
@@ -1727,9 +1727,9 @@ namespace SabreTools.Core.Tools
{
return supported switch
{
- Supported.No => "no",
+ Supported.No => verbose ? "unsupported" : "no",
Supported.Partial => "partial",
- Supported.Yes => "yes",
+ Supported.Yes => verbose ? "supported" : "yes",
_ => null,
};
}
diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs
index f95839bc..b3077741 100644
--- a/SabreTools.DatFiles/DatFile.cs
+++ b/SabreTools.DatFiles/DatFile.cs
@@ -70,88 +70,37 @@ namespace SabreTools.DatFiles
/// DatFile of the specific internal type that corresponds to the inputs
public static DatFile Create(DatFormat? datFormat = null, DatFile baseDat = null, bool quotes = true)
{
- switch (datFormat)
+ return datFormat switch
{
- case DatFormat.AttractMode:
- return new AttractMode(baseDat);
-
- case DatFormat.ClrMamePro:
- return new ClrMamePro(baseDat, quotes);
-
- case DatFormat.CSV:
- return new Formats.SeparatedValue(baseDat, ',');
-
- case DatFormat.DOSCenter:
- return new DosCenter(baseDat);
-
- case DatFormat.EverdriveSMDB:
- return new EverdriveSMDB(baseDat);
-
- case DatFormat.Listrom:
- return new Listrom(baseDat);
-
- case DatFormat.Listxml:
- return new Listxml(baseDat);
-
- case DatFormat.Logiqx:
- return new Logiqx(baseDat, false);
-
- case DatFormat.LogiqxDeprecated:
- return new Logiqx(baseDat, true);
-
- case DatFormat.MissFile:
- return new Missfile(baseDat);
-
- case DatFormat.OfflineList:
- return new OfflineList(baseDat);
-
- case DatFormat.OpenMSX:
- return new OpenMSX(baseDat);
-
- case DatFormat.RedumpMD5:
- return new Hashfile(baseDat, Hash.MD5);
-
- case DatFormat.RedumpSFV:
- return new Hashfile(baseDat, Hash.CRC);
-
- case DatFormat.RedumpSHA1:
- return new Hashfile(baseDat, Hash.SHA1);
-
- case DatFormat.RedumpSHA256:
- return new Hashfile(baseDat, Hash.SHA256);
-
- case DatFormat.RedumpSHA384:
- return new Hashfile(baseDat, Hash.SHA384);
-
- case DatFormat.RedumpSHA512:
- return new Hashfile(baseDat, Hash.SHA512);
-
- case DatFormat.RedumpSpamSum:
- return new Hashfile(baseDat, Hash.SpamSum);
-
- case DatFormat.RomCenter:
- return new RomCenter(baseDat);
-
- case DatFormat.SabreJSON:
- return new SabreJSON(baseDat);
-
- case DatFormat.SabreXML:
- return new SabreXML(baseDat);
-
- case DatFormat.SoftwareList:
- return new Formats.SoftwareList(baseDat);
-
- case DatFormat.SSV:
- return new Formats.SeparatedValue(baseDat, ';');
-
- case DatFormat.TSV:
- return new Formats.SeparatedValue(baseDat, '\t');
-
+ DatFormat.AttractMode => new AttractMode(baseDat),
+ DatFormat.ClrMamePro => new ClrMamePro(baseDat, quotes),
+ DatFormat.CSV => new SeparatedValue(baseDat, ','),
+ DatFormat.DOSCenter => new DosCenter(baseDat),
+ DatFormat.EverdriveSMDB => new EverdriveSMDB(baseDat),
+ DatFormat.Listrom => new Listrom(baseDat),
+ DatFormat.Listxml => new Listxml(baseDat),
+ DatFormat.Logiqx => new Logiqx(baseDat, false),
+ DatFormat.LogiqxDeprecated => new Logiqx(baseDat, true),
+ DatFormat.MissFile => new Missfile(baseDat),
+ DatFormat.OfflineList => new OfflineList(baseDat),
+ DatFormat.OpenMSX => new OpenMSX(baseDat),
+ DatFormat.RedumpMD5 => new Hashfile(baseDat, Hash.MD5),
+ DatFormat.RedumpSFV => new Hashfile(baseDat, Hash.CRC),
+ DatFormat.RedumpSHA1 => new Hashfile(baseDat, Hash.SHA1),
+ DatFormat.RedumpSHA256 => new Hashfile(baseDat, Hash.SHA256),
+ DatFormat.RedumpSHA384 => new Hashfile(baseDat, Hash.SHA384),
+ DatFormat.RedumpSHA512 => new Hashfile(baseDat, Hash.SHA512),
+ DatFormat.RedumpSpamSum => new Hashfile(baseDat, Hash.SpamSum),
+ DatFormat.RomCenter => new RomCenter(baseDat),
+ DatFormat.SabreJSON => new SabreJSON(baseDat),
+ DatFormat.SabreXML => new SabreXML(baseDat),
+ DatFormat.SoftwareList => new Formats.SoftwareList(baseDat),
+ DatFormat.SSV => new SeparatedValue(baseDat, ';'),
+ DatFormat.TSV => new SeparatedValue(baseDat, '\t'),
+
// We use new-style Logiqx as a backup for generic DatFile
- case null:
- default:
- return new Logiqx(baseDat, false);
- }
+ _ => new Logiqx(baseDat, false),
+ };
}
///
@@ -213,7 +162,7 @@ namespace SabreTools.DatFiles
/// The key for the item
protected string ParseAddHelper(DatItem item)
{
- string key = string.Empty;
+ string key;
// If we have a Disk, Media, or Rom, clean the hash data
if (item.ItemType == ItemType.Disk)
@@ -344,7 +293,7 @@ namespace SabreTools.DatFiles
protected string CreatePrefixPostfix(DatItem item, bool prefix)
{
// Initialize strings
- string fix = string.Empty,
+ string fix,
game = item.Machine.Name,
name = item.GetName() ?? item.ItemType.ToString(),
crc = string.Empty,
diff --git a/SabreTools.DatFiles/Formats/EverdriveSmdb.cs b/SabreTools.DatFiles/Formats/EverdriveSmdb.cs
index 739172f6..1a0317ef 100644
--- a/SabreTools.DatFiles/Formats/EverdriveSmdb.cs
+++ b/SabreTools.DatFiles/Formats/EverdriveSmdb.cs
@@ -69,7 +69,7 @@ namespace SabreTools.DatFiles.Formats
Rom rom = new Rom
{
- Name = svr.Line[1].Substring(fullname[0].Length + 1),
+ Name = svr.Line[1][(fullname[0].Length + 1)..],
Size = null, // No size provided, but we don't want the size being 0
CRC = svr.Line[4],
MD5 = svr.Line[3],
diff --git a/SabreTools.DatFiles/Formats/Hashfile.cs b/SabreTools.DatFiles/Formats/Hashfile.cs
index f22dd9da..f03d97b5 100644
--- a/SabreTools.DatFiles/Formats/Hashfile.cs
+++ b/SabreTools.DatFiles/Formats/Hashfile.cs
@@ -222,7 +222,7 @@ namespace SabreTools.DatFiles.Formats
}
// Get the hash field and set final fields
- string hash = string.Empty;
+ string hash;
switch (_hash)
{
case Hash.CRC:
diff --git a/SabreTools.DatFiles/Formats/Listrom.cs b/SabreTools.DatFiles/Formats/Listrom.cs
index 37386791..e8f19bf2 100644
--- a/SabreTools.DatFiles/Formats/Listrom.cs
+++ b/SabreTools.DatFiles/Formats/Listrom.cs
@@ -93,7 +93,7 @@ namespace SabreTools.DatFiles.Formats
logger.Warning($"Possibly malformed line: '{line}'");
string romname = split[0];
- line = line.Substring(romname.Length);
+ line = line[romname.Length..];
// Next we separate the ROM into pieces
split = line.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
diff --git a/SabreTools.DatFiles/Formats/Logiqx.cs b/SabreTools.DatFiles/Formats/Logiqx.cs
index 656e5463..7cd3967f 100644
--- a/SabreTools.DatFiles/Formats/Logiqx.cs
+++ b/SabreTools.DatFiles/Formats/Logiqx.cs
@@ -398,8 +398,6 @@ namespace SabreTools.DatFiles.Formats
// Otherwise, add what is possible
reader.MoveToContent();
- string key = string.Empty;
- string temptype = reader.Name;
bool containsItems = false;
// Create a new machine
@@ -497,7 +495,7 @@ namespace SabreTools.DatFiles.Formats
archive.CopyMachineInformation(machine);
// Now process and add the archive
- key = ParseAddHelper(archive);
+ ParseAddHelper(archive);
reader.Read();
break;
@@ -521,7 +519,7 @@ namespace SabreTools.DatFiles.Formats
biosSet.CopyMachineInformation(machine);
// Now process and add the biosSet
- key = ParseAddHelper(biosSet);
+ ParseAddHelper(biosSet);
reader.Read();
break;
@@ -547,7 +545,7 @@ namespace SabreTools.DatFiles.Formats
disk.CopyMachineInformation(machine);
// Now process and add the disk
- key = ParseAddHelper(disk);
+ ParseAddHelper(disk);
reader.Read();
break;
@@ -573,7 +571,7 @@ namespace SabreTools.DatFiles.Formats
media.CopyMachineInformation(machine);
// Now process and add the media
- key = ParseAddHelper(media);
+ ParseAddHelper(media);
reader.Read();
break;
@@ -593,7 +591,7 @@ namespace SabreTools.DatFiles.Formats
release.CopyMachineInformation(machine);
// Now process and add the release
- key = ParseAddHelper(release);
+ ParseAddHelper(release);
reader.Read();
break;
@@ -627,7 +625,7 @@ namespace SabreTools.DatFiles.Formats
rom.CopyMachineInformation(machine);
// Now process and add the rom
- key = ParseAddHelper(rom);
+ ParseAddHelper(rom);
reader.Read();
break;
@@ -649,7 +647,7 @@ namespace SabreTools.DatFiles.Formats
sample.CopyMachineInformation(machine);
// Now process and add the sample
- key = ParseAddHelper(sample);
+ ParseAddHelper(sample);
reader.Read();
break;
diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs
index 1235a236..1c0cd99b 100644
--- a/SabreTools.DatFiles/Formats/SabreJSON.cs
+++ b/SabreTools.DatFiles/Formats/SabreJSON.cs
@@ -536,7 +536,7 @@ namespace SabreTools.DatFiles.Formats
return base.CreateProperties(type, memberSerialization)
.OrderBy(p => BaseTypesAndSelf(p.DeclaringType).Count()).ToList();
- IEnumerable BaseTypesAndSelf(Type t)
+ static IEnumerable BaseTypesAndSelf(Type t)
{
while (t != null)
{
diff --git a/SabreTools.DatFiles/ItemDictionary.cs b/SabreTools.DatFiles/ItemDictionary.cs
index c8466a1b..f6ee638b 100644
--- a/SabreTools.DatFiles/ItemDictionary.cs
+++ b/SabreTools.DatFiles/ItemDictionary.cs
@@ -34,7 +34,7 @@ namespace SabreTools.DatFiles
///
/// Internal dictionary for the class
///
- private ConcurrentDictionary> items;
+ private readonly ConcurrentDictionary> items;
///
/// Lock for statistics calculation
@@ -44,12 +44,7 @@ namespace SabreTools.DatFiles
///
/// Logging object
///
- private Logger logger;
-
- ///
- /// Static logger for static methods
- ///
- private static Logger staticLogger = new Logger();
+ private readonly Logger logger;
#endregion
diff --git a/SabreTools.DatItems/Disk.cs b/SabreTools.DatItems/Disk.cs
index 7a0c9109..34d3f1bd 100644
--- a/SabreTools.DatItems/Disk.cs
+++ b/SabreTools.DatItems/Disk.cs
@@ -370,7 +370,7 @@ namespace SabreTools.DatItems
public override string GetKey(ItemKey bucketedBy, bool lower = true, bool norename = true)
{
// Set the output key as the default blank string
- string key = string.Empty;
+ string key;
// Now determine what the key should be based on the bucketedBy value
switch (bucketedBy)
diff --git a/SabreTools.DatItems/Media.cs b/SabreTools.DatItems/Media.cs
index 700f61b1..63784be0 100644
--- a/SabreTools.DatItems/Media.cs
+++ b/SabreTools.DatItems/Media.cs
@@ -293,7 +293,7 @@ namespace SabreTools.DatItems
public override string GetKey(ItemKey bucketedBy, bool lower = true, bool norename = true)
{
// Set the output key as the default blank string
- string key = string.Empty;
+ string key;
// Now determine what the key should be based on the bucketedBy value
switch (bucketedBy)
diff --git a/SabreTools.DatItems/Rom.cs b/SabreTools.DatItems/Rom.cs
index d74b4737..60f6cda1 100644
--- a/SabreTools.DatItems/Rom.cs
+++ b/SabreTools.DatItems/Rom.cs
@@ -629,7 +629,7 @@ namespace SabreTools.DatItems
public override string GetKey(ItemKey bucketedBy, bool lower = true, bool norename = true)
{
// Set the output key as the default blank string
- string key = string.Empty;
+ string key;
// Now determine what the key should be based on the bucketedBy value
switch (bucketedBy)
diff --git a/SabreTools.DatTools/DatFromDir.cs b/SabreTools.DatTools/DatFromDir.cs
index 361a16ee..de1cbe32 100644
--- a/SabreTools.DatTools/DatFromDir.cs
+++ b/SabreTools.DatTools/DatFromDir.cs
@@ -415,22 +415,22 @@ namespace SabreTools.DatTools
// If we have a Disk, then the ".chd" extension needs to be removed
if (datItem.ItemType == ItemType.Disk && itemName.EndsWith(".chd"))
{
- itemName = itemName.Substring(0, itemName.Length - 4);
+ itemName = itemName[0..^4];
}
// If we have a Media, then the extension needs to be removed
else if (datItem.ItemType == ItemType.Media)
{
if (itemName.EndsWith(".dicf"))
- itemName = itemName.Substring(0, itemName.Length - 5);
+ itemName = itemName[0..^5];
else if (itemName.EndsWith(".aaru"))
- itemName = itemName.Substring(0, itemName.Length - 5);
+ itemName = itemName[0..^5];
else if (itemName.EndsWith(".aaruformat"))
- itemName = itemName.Substring(0, itemName.Length - 11);
+ itemName = itemName[0..^11];
else if (itemName.EndsWith(".aaruf"))
- itemName = itemName.Substring(0, itemName.Length - 6);
+ itemName = itemName[0..^6];
else if (itemName.EndsWith(".aif"))
- itemName = itemName.Substring(0, itemName.Length - 4);
+ itemName = itemName[0..^4];
}
// Set the item name back
diff --git a/SabreTools.DatTools/Parser.cs b/SabreTools.DatTools/Parser.cs
index ad18201a..04621e39 100644
--- a/SabreTools.DatTools/Parser.cs
+++ b/SabreTools.DatTools/Parser.cs
@@ -158,23 +158,21 @@ namespace SabreTools.DatTools
try
{
- using (StreamReader sr = File.OpenText(filename))
+ using StreamReader sr = File.OpenText(filename);
+ first = sr.ReadLine().ToLowerInvariant();
+ while ((string.IsNullOrWhiteSpace(first) || first.StartsWith("