diff --git a/SabreTools.Library/DatFiles/ClrMamePro.cs b/SabreTools.Library/DatFiles/ClrMamePro.cs
index fe637dca..a0eb734c 100644
--- a/SabreTools.Library/DatFiles/ClrMamePro.cs
+++ b/SabreTools.Library/DatFiles/ClrMamePro.cs
@@ -709,7 +709,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(biosSet.GetField(Field.BiosDescription, Header.ExcludeFields)))
cmpw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields[(int)Field.Default] && biosSet.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
cmpw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
@@ -732,7 +732,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
cmpw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
cmpw.WriteAttributeString("flags", disk.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
@@ -747,7 +747,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
cmpw.WriteAttributeString("date", release.Date);
- if (!Header.ExcludeFields[(int)Field.Default] && release.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
cmpw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
@@ -756,7 +756,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
cmpw.WriteStartElement("rom");
cmpw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
cmpw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
cmpw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -776,7 +776,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
cmpw.WriteAttributeString("date", rom.Date);
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
cmpw.WriteAttributeString("flags", rom.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs
index df4bc1e2..214ccfc7 100644
--- a/SabreTools.Library/DatFiles/DatFile.cs
+++ b/SabreTools.Library/DatFiles/DatFile.cs
@@ -450,7 +450,7 @@ namespace SabreTools.Library.DatFiles
/// Filter object to be passed to the DatItem level
/// List of Fields representing what should be updated [only for base replacement]
/// True if descriptions should only be replaced if the game name is the same, false otherwise
- private void BaseReplace(
+ internal void BaseReplace(
List inputs,
string outDir,
bool inplace,
@@ -937,7 +937,7 @@ namespace SabreTools.Library.DatFiles
/// Names of the input files
/// Optional param for output directory
/// True if the output files should overwrite their inputs, false otherwise
- private void DiffAgainst(List inputs, string outDir, bool inplace)
+ internal void DiffAgainst(List inputs, string outDir, bool inplace)
{
// For comparison's sake, we want to use CRC as the base ordering
Items.BucketBy(BucketedBy.CRC, DedupeType.Full);
@@ -989,7 +989,7 @@ namespace SabreTools.Library.DatFiles
/// Output directory to write the DATs to
/// True if cascaded diffs are outputted in-place, false otherwise
/// True if the first cascaded diff file should be skipped on output, false otherwise
- private void DiffCascade(
+ internal void DiffCascade(
List inputs,
List datHeaders,
string outDir,
@@ -1077,7 +1077,7 @@ namespace SabreTools.Library.DatFiles
/// List of inputs to write out from
/// Output directory to write the DATs to
/// Non-zero flag for diffing mode, zero otherwise
- private void DiffNoCascade(List inputs, string outDir, UpdateMode diff)
+ internal void DiffNoCascade(List inputs, string outDir, UpdateMode diff)
{
InternalStopwatch watch = new InternalStopwatch("Initializing all output DATs");
@@ -1223,7 +1223,7 @@ namespace SabreTools.Library.DatFiles
///
/// List of inputs to write out from
/// Output directory to write the DATs to
- private void MergeNoDiff(List inputs, string outDir)
+ internal void MergeNoDiff(List inputs, string outDir)
{
// If we're in SuperDAT mode, prefix all games with their respective DATs
if (Header.Type == "SuperDAT")
@@ -1262,7 +1262,7 @@ namespace SabreTools.Library.DatFiles
/// Paths to DATs to parse
/// Filter object to be passed to the DatItem level
/// List of DatData objects representing headers
- private List PopulateUserData(List inputs, Filter filter)
+ internal List PopulateUserData(List inputs, Filter filter)
{
DatFile[] datFiles = new DatFile[inputs.Count];
InternalStopwatch watch = new InternalStopwatch("Processing individual DATs");
@@ -1299,7 +1299,7 @@ namespace SabreTools.Library.DatFiles
/// Optional param for output directory
/// True if the output files should overwrite their inputs, false otherwise
/// Filter object to be passed to the DatItem level
- private void Update(List inputs, string outDir, bool inplace, Filter filter)
+ internal void Update(List inputs, string outDir, bool inplace, Filter filter)
{
// Iterate over the files
foreach (ParentablePath file in inputs)
@@ -1335,6 +1335,19 @@ namespace SabreTools.Library.DatFiles
return datFile;
}
+ ///
+ /// Parse a DAT and return all found games and roms within
+ ///
+ /// Name of the file to be parsed
+ /// Index ID for the DAT
+ /// True if full pathnames are to be kept, false otherwise (default)
+ /// True if original extension should be kept, false otherwise (default)
+ public void Parse(string filename, int indexId = 0, bool keep = false, bool keepext = false)
+ {
+ ParentablePath path = new ParentablePath(filename);
+ Parse(path, indexId, keep, keepext);
+ }
+
///
/// Parse a DAT and return all found games and roms within
///
diff --git a/SabreTools.Library/DatFiles/DatHeader.cs b/SabreTools.Library/DatFiles/DatHeader.cs
index 337d6af6..e5057ca7 100644
--- a/SabreTools.Library/DatFiles/DatHeader.cs
+++ b/SabreTools.Library/DatFiles/DatHeader.cs
@@ -126,10 +126,10 @@ namespace SabreTools.Library.DatFiles
public DatFormat DatFormat { get; set; }
///
- /// List of fields in machine and items to exclude from writing
+ /// Dictionary of fields in machine and items to exclude from writing
///
[JsonIgnore]
- public bool[] ExcludeFields { get; set; } = new bool[Enum.GetNames(typeof(Field)).Length];
+ public List ExcludeFields { get; set; } = new List();
///
/// Enable "One Rom, One Region (1G1R)" mode
diff --git a/SabreTools.Library/DatFiles/DosCenter.cs b/SabreTools.Library/DatFiles/DosCenter.cs
index 0bc0a20e..dce21ca3 100644
--- a/SabreTools.Library/DatFiles/DosCenter.cs
+++ b/SabreTools.Library/DatFiles/DosCenter.cs
@@ -468,7 +468,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
cmpw.WriteStartElement("file");
cmpw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
cmpw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
cmpw.WriteAttributeString("date", rom.Date);
diff --git a/SabreTools.Library/DatFiles/Filter.cs b/SabreTools.Library/DatFiles/Filter.cs
index bbd330b7..517d7569 100644
--- a/SabreTools.Library/DatFiles/Filter.cs
+++ b/SabreTools.Library/DatFiles/Filter.cs
@@ -287,6 +287,12 @@ namespace SabreTools.Library.DatFiles
///
public bool RemoveUnicode { get; set; }
+ ///
+ /// Remove fields based on Header values
+ ///
+ /// TODO: Remove in lieu of relying on Header value
+ public bool RemoveFields { get; set; }
+
///
/// Include root directory when determing trim sizes
///
@@ -877,6 +883,10 @@ namespace SabreTools.Library.DatFiles
// Run the one rom per game logic, if required
if (datFile.Header.OneRom)
OneRomPerGame(datFile);
+
+ // If we are removing fields, do that now
+ if (RemoveFields)
+ RemoveFieldsFromItems(datFile);
}
catch (Exception ex)
{
@@ -987,6 +997,10 @@ namespace SabreTools.Library.DatFiles
// Run the one rom per game logic, if required
if (outDat.Header.OneRom)
OneRomPerGame(outDat);
+
+ // If we are removing fields, do that now
+ if (RemoveFields)
+ RemoveFieldsFromItems(outDat);
}
catch (Exception ex)
{
@@ -2061,6 +2075,220 @@ namespace SabreTools.Library.DatFiles
});
}
+ ///
+ /// Remove fields as per the header
+ ///
+ /// DatFile to filter
+ private void RemoveFieldsFromItems(DatFile datFile)
+ {
+ // Output the logging statement
+ Globals.Logger.User("Removing filtered fields");
+
+ // Get the array of fields from the header
+ List fields = datFile.Header.ExcludeFields;
+
+ // Now process all of the roms
+ Parallel.ForEach(datFile.Items.Keys, Globals.ParallelOptions, key =>
+ {
+ List items = datFile.Items[key];
+ for (int j = 0; j < items.Count; j++)
+ {
+ DatItem item = items[j];
+
+ // TODO: Switch statement
+ foreach (Field field in fields)
+ {
+ // Machine Fields
+ if (field == Field.MachineName)
+ item.MachineName = null;
+ if (field == Field.Comment)
+ item.Comment = null;
+ if (field == Field.Description)
+ item.MachineDescription = null;
+ if (field == Field.Year)
+ item.Year = null;
+ if (field == Field.Manufacturer)
+ item.Manufacturer = null;
+ if (field == Field.Publisher)
+ item.Publisher = null;
+ if (field == Field.Category)
+ item.Category = null;
+ if (field == Field.RomOf)
+ item.RomOf = null;
+ if (field == Field.CloneOf)
+ item.CloneOf = null;
+ if (field == Field.SampleOf)
+ item.SampleOf = null;
+ if (field == Field.Supported)
+ item.Supported = null;
+ if (field == Field.SourceFile)
+ item.SourceFile = null;
+ if (field == Field.Runnable)
+ item.Runnable = null;
+ if (field == Field.Board)
+ item.Board = null;
+ if (field == Field.RebuildTo)
+ item.RebuildTo = null;
+ if (field == Field.Devices)
+ item.Devices = null;
+ if (field == Field.SlotOptions)
+ item.SlotOptions = null;
+ if (field == Field.Infos)
+ item.Infos = null;
+ if (field == Field.MachineType)
+ item.MachineType = MachineType.NULL;
+
+ // Item Fields
+ if (field == Field.Name)
+ item.Name = null;
+ if (field == Field.PartName)
+ item.PartName = null;
+ if (field == Field.PartInterface)
+ item.PartInterface = null;
+ if (field == Field.Features)
+ item.Features = null;
+ if (field == Field.AreaName)
+ item.AreaName = null;
+ if (field == Field.AreaSize)
+ item.AreaSize = null;
+ if (field == Field.Default)
+ {
+ if (item.ItemType == ItemType.BiosSet)
+ (item as BiosSet).Default = null;
+ else if (item.ItemType == ItemType.Release)
+ (item as Release).Default = null;
+ }
+ if (field == Field.BiosDescription)
+ {
+ if (item.ItemType == ItemType.BiosSet)
+ (item as BiosSet).Description = null;
+ }
+ if (field == Field.Size)
+ {
+ if (item.ItemType == ItemType.Rom)
+ (item as Rom).Size = 0;
+ }
+ if (field == Field.CRC)
+ {
+ if (item.ItemType == ItemType.Rom)
+ (item as Rom).CRC = null;
+ }
+ if (field == Field.MD5)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).MD5 = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).MD5 = null;
+ }
+#if NET_FRAMEWORK
+ if (field == Field.RIPEMD160)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).RIPEMD160 = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).RIPEMD160 = null;
+ }
+#endif
+ if (field == Field.SHA1)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).SHA1 = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).SHA1 = null;
+ }
+ if (field == Field.SHA256)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).SHA256 = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).SHA256 = null;
+ }
+ if (field == Field.SHA384)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).SHA384 = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).SHA384 = null;
+ }
+ if (field == Field.SHA512)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).SHA512 = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).SHA512 = null;
+ }
+ if (field == Field.Merge)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).MergeTag = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).MergeTag = null;
+ }
+ if (field == Field.Region)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).Region = null;
+ else if (item.ItemType == ItemType.Release)
+ (item as Release).Region = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).Region = null;
+ }
+ if (field == Field.Index)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).Index = null;
+ }
+ if (field == Field.Writable)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).Writable = null;
+ }
+ if (field == Field.Optional)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).Optional = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).Optional = null;
+ }
+ if (field == Field.Status)
+ {
+ if (item.ItemType == ItemType.Disk)
+ (item as Disk).ItemStatus = ItemStatus.NULL;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).ItemStatus = ItemStatus.NULL;
+ }
+ if (field == Field.Language)
+ {
+ if (item.ItemType == ItemType.Release)
+ (item as Release).Language = null;
+ }
+ if (field == Field.Date)
+ {
+ if (item.ItemType == ItemType.Release)
+ (item as Release).Date = null;
+ else if (item.ItemType == ItemType.Rom)
+ (item as Rom).Date = null;
+ }
+ if (field == Field.Bios)
+ {
+ if (item.ItemType == ItemType.Rom)
+ (item as Rom).Bios = null;
+ }
+ if (field == Field.Offset)
+ {
+ if (item.ItemType == ItemType.Rom)
+ (item as Rom).Offset = null;
+ }
+ }
+
+ items[j] = item;
+ }
+
+ datFile.Items.Remove(key);
+ datFile.Items.AddRange(key, items);
+ });
+ }
+
///
/// Strip the dates from the beginning of scene-style set names
///
diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs
index b044dee6..0a763558 100644
--- a/SabreTools.Library/DatFiles/Json.cs
+++ b/SabreTools.Library/DatFiles/Json.cs
@@ -1043,7 +1043,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("sampleof");
jtw.WriteValue(datItem.SampleOf);
}
- if (!Header.ExcludeFields[(int)Field.Supported] && datItem.Supported != null)
+ if (!Header.ExcludeFields.Contains(Field.Supported) && datItem.Supported != null)
{
if (datItem.Supported == true)
{
@@ -1061,7 +1061,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("sourcefile");
jtw.WriteValue(datItem.SourceFile);
}
- if (!Header.ExcludeFields[(int)Field.Runnable] && datItem.Runnable != null)
+ if (!Header.ExcludeFields.Contains(Field.Runnable) && datItem.Runnable != null)
{
if (datItem.Runnable == true)
{
@@ -1120,7 +1120,7 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray();
}
- if (!Header.ExcludeFields[(int)Field.MachineType])
+ if (!Header.ExcludeFields.Contains(Field.MachineType))
{
if (datItem.MachineType.HasFlag(MachineType.Bios))
{
@@ -1223,7 +1223,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("description");
jtw.WriteValue(biosSet.Description);
}
- if (!Header.ExcludeFields[(int)Field.Default] && biosSet.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
{
jtw.WritePropertyName("default");
jtw.WriteValue(biosSet.Default);
@@ -1287,7 +1287,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("writable");
jtw.WriteValue(disk.Writable);
}
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
{
jtw.WritePropertyName("status");
jtw.WriteValue(disk.ItemStatus.ToString().ToLowerInvariant());
@@ -1319,7 +1319,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("date");
jtw.WriteValue(release.Date);
}
- if (!Header.ExcludeFields[(int)Field.Default] && release.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
{
jtw.WritePropertyName("default");
jtw.WriteValue(release.Default);
@@ -1331,7 +1331,7 @@ namespace SabreTools.Library.DatFiles
jtw.WriteValue("rom");
jtw.WritePropertyName("name");
jtw.WriteValue(rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
{
jtw.WritePropertyName("size");
jtw.WriteValue(rom.Size);
@@ -1398,7 +1398,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("date");
jtw.WriteValue(rom.Date);
}
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
{
jtw.WritePropertyName("status");
jtw.WriteValue(rom.ItemStatus.ToString().ToLowerInvariant());
diff --git a/SabreTools.Library/DatFiles/Listrom.cs b/SabreTools.Library/DatFiles/Listrom.cs
index 4295a6a4..cd5e8283 100644
--- a/SabreTools.Library/DatFiles/Listrom.cs
+++ b/SabreTools.Library/DatFiles/Listrom.cs
@@ -399,11 +399,11 @@ namespace SabreTools.Library.DatFiles
sw.Write($"{disk.Name} ");
// If we have a baddump, put the first indicator
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus == ItemStatus.BadDump)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD");
// If we have a nodump, write out the indicator
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus == ItemStatus.Nodump)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus == ItemStatus.Nodump)
sw.Write(" NO GOOD DUMP KNOWN");
// Otherwise, write out the SHA-1 hash
@@ -411,7 +411,7 @@ namespace SabreTools.Library.DatFiles
sw.Write($" SHA1({disk.SHA1})");
// If we have a baddump, put the second indicator
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus == ItemStatus.BadDump)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD_DUMP");
sw.Write("\n");
@@ -431,11 +431,11 @@ namespace SabreTools.Library.DatFiles
sw.Write(rom.Size);
// If we have a baddump, put the first indicator
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus == ItemStatus.BadDump)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD");
// If we have a nodump, write out the indicator
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus == ItemStatus.Nodump)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus == ItemStatus.Nodump)
{
sw.Write(" NO GOOD DUMP KNOWN");
}
@@ -449,7 +449,7 @@ namespace SabreTools.Library.DatFiles
}
// If we have a baddump, put the second indicator
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus == ItemStatus.BadDump)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus == ItemStatus.BadDump)
sw.Write(" BAD_DUMP");
sw.Write("\n");
diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs
index c6e96d4e..98d05aaf 100644
--- a/SabreTools.Library/DatFiles/Listxml.cs
+++ b/SabreTools.Library/DatFiles/Listxml.cs
@@ -681,7 +681,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields)))
xtw.WriteElementString("sourcefile", datItem.SourceFile);
- if (!Header.ExcludeFields[(int)Field.MachineType])
+ if (!Header.ExcludeFields.Contains(Field.MachineType))
{
if (datItem.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes");
@@ -691,7 +691,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("ismechanical", "yes");
}
- if (!Header.ExcludeFields[(int)Field.Runnable])
+ if (!Header.ExcludeFields.Contains(Field.Runnable))
{
if (datItem.Runnable == true)
xtw.WriteAttributeString("runnable", "yes");
@@ -715,7 +715,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
xtw.WriteElementString("category", datItem.Category);
- if (!Header.ExcludeFields[(int)Field.Infos] && datItem.Infos != null && datItem.Infos.Count > 0)
+ if (!Header.ExcludeFields.Contains(Field.Infos) && datItem.Infos != null && datItem.Infos.Count > 0)
{
foreach (KeyValuePair kvp in datItem.Infos)
{
@@ -787,7 +787,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
xtw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields[(int)Field.Default] && biosSet.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -816,11 +816,11 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("region", disk.Region);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Index, Header.ExcludeFields)))
xtw.WriteAttributeString("index", disk.Index);
- if (!Header.ExcludeFields[(int)Field.Writable] && disk.Writable != null)
+ if (!Header.ExcludeFields.Contains(Field.Writable) && disk.Writable != null)
xtw.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", disk.ItemStatus.ToString());
- if (!Header.ExcludeFields[(int)Field.Optional] && disk.Optional != null)
+ if (!Header.ExcludeFields.Contains(Field.Optional) && disk.Optional != null)
xtw.WriteAttributeString("optional", disk.Optional == true ? "yes" : "no");
xtw.WriteEndElement();
break;
@@ -829,7 +829,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -855,9 +855,9 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("region", rom.Region);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields)))
xtw.WriteAttributeString("offset", rom.Offset);
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
- if (!Header.ExcludeFields[(int)Field.Optional] && rom.Optional != null)
+ if (!Header.ExcludeFields.Contains(Field.Optional) && rom.Optional != null)
xtw.WriteAttributeString("optional", rom.Optional == true ? "yes" : "no");
xtw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs
index 10db741e..3f2c9805 100644
--- a/SabreTools.Library/DatFiles/Logiqx.cs
+++ b/SabreTools.Library/DatFiles/Logiqx.cs
@@ -859,7 +859,7 @@ namespace SabreTools.Library.DatFiles
// Build the state based on excluded fields
xtw.WriteStartElement(_deprecated ? "game" : "machine");
xtw.WriteAttributeString("name", datItem.GetField(Field.MachineName, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.MachineType])
+ if (!Header.ExcludeFields.Contains(Field.MachineType))
{
if (datItem.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes");
@@ -869,7 +869,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("ismechanical", "yes");
}
- if (!Header.ExcludeFields[(int)Field.Runnable] && datItem.Runnable != null)
+ if (!Header.ExcludeFields.Contains(Field.Runnable) && datItem.Runnable != null)
{
if (datItem.Runnable == true)
xtw.WriteAttributeString("runnable", "yes");
@@ -964,7 +964,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
xtw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields[(int)Field.Default] && biosSet.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -987,7 +987,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1002,7 +1002,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", release.Date);
- if (!Header.ExcludeFields[(int)Field.Default] && release.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
xtw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -1011,7 +1011,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom;
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -1031,7 +1031,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", rom.Date);
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs
index dd08a6c1..ae3ab58b 100644
--- a/SabreTools.Library/DatFiles/SabreDat.cs
+++ b/SabreTools.Library/DatFiles/SabreDat.cs
@@ -777,8 +777,8 @@ namespace SabreTools.Library.DatFiles
for (int i = (last == -1 ? 0 : last); i < newsplit.Count; i++)
{
xtw.WriteStartElement("directory");
- xtw.WriteAttributeString("name", !Header.ExcludeFields[(int)Field.MachineName] ? newsplit[i] : string.Empty);
- xtw.WriteAttributeString("description", !Header.ExcludeFields[(int)Field.MachineName] ? newsplit[i] : string.Empty);
+ xtw.WriteAttributeString("name", !Header.ExcludeFields.Contains(Field.MachineName) ? newsplit[i] : string.Empty);
+ xtw.WriteAttributeString("description", !Header.ExcludeFields.Contains(Field.MachineName) ? newsplit[i] : string.Empty);
}
depth = depth - (last == -1 ? 0 : last) + newsplit.Count;
@@ -879,7 +879,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
xtw.WriteAttributeString("description", biosSet.Description);
- if (!Header.ExcludeFields[(int)Field.Default] && biosSet.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && biosSet.Default != null)
xtw.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -903,7 +903,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
{
xtw.WriteStartElement("flags");
@@ -929,7 +929,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", release.Date);
- if (!Header.ExcludeFields[(int)Field.Default] && release.Default != null)
+ if (!Header.ExcludeFields.Contains(Field.Default) && release.Default != null)
xtw.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement();
break;
@@ -939,7 +939,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -959,7 +959,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", rom.Date);
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
{
xtw.WriteStartElement("flags");
diff --git a/SabreTools.Library/DatFiles/SoftwareList.cs b/SabreTools.Library/DatFiles/SoftwareList.cs
index 7939399c..f17c9a27 100644
--- a/SabreTools.Library/DatFiles/SoftwareList.cs
+++ b/SabreTools.Library/DatFiles/SoftwareList.cs
@@ -701,7 +701,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)) && !string.Equals(datItem.MachineName, datItem.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteAttributeString("cloneof", datItem.CloneOf);
- if (!Header.ExcludeFields[(int)Field.Supported])
+ if (!Header.ExcludeFields.Contains(Field.Supported))
{
if (datItem.Supported == true)
xtw.WriteAttributeString("supported", "yes");
@@ -720,7 +720,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
xtw.WriteElementString("category", datItem.Category);
- if (!Header.ExcludeFields[(int)Field.Infos] && datItem.Infos != null && datItem.Infos.Count > 0)
+ if (!Header.ExcludeFields.Contains(Field.Infos) && datItem.Infos != null && datItem.Infos.Count > 0)
{
foreach (KeyValuePair kvp in datItem.Infos)
{
@@ -788,7 +788,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", datItem.GetField(Field.PartName, Header.ExcludeFields));
xtw.WriteAttributeString("interface", datItem.GetField(Field.PartInterface, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Features] && datItem.Features != null && datItem.Features.Count > 0)
+ if (!Header.ExcludeFields.Contains(Field.Features) && datItem.Features != null && datItem.Features.Count > 0)
{
foreach (KeyValuePair kvp in datItem.Features)
{
@@ -804,12 +804,12 @@ namespace SabreTools.Library.DatFiles
{
case ItemType.Disk:
var disk = datItem as Disk;
- if (!Header.ExcludeFields[(int)Field.AreaName] && string.IsNullOrWhiteSpace(areaName))
+ if (!Header.ExcludeFields.Contains(Field.AreaName) && string.IsNullOrWhiteSpace(areaName))
areaName = "cdrom";
xtw.WriteStartElement("diskarea");
xtw.WriteAttributeString("name", areaName);
- if (!Header.ExcludeFields[(int)Field.AreaSize] && disk.AreaSize != null)
+ if (!Header.ExcludeFields.Contains(Field.AreaSize) && disk.AreaSize != null)
xtw.WriteAttributeString("size", disk.AreaSize.ToString());
xtw.WriteStartElement("disk");
@@ -828,9 +828,9 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant());
- if (!Header.ExcludeFields[(int)Field.Status] && disk.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && disk.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
- if (!Header.ExcludeFields[(int)Field.Writable] && disk.Writable != null)
+ if (!Header.ExcludeFields.Contains(Field.Writable) && disk.Writable != null)
xtw.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
xtw.WriteEndElement();
@@ -840,17 +840,17 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom:
var rom = datItem as Rom;
- if (!Header.ExcludeFields[(int)Field.AreaName] && string.IsNullOrWhiteSpace(areaName))
+ if (!Header.ExcludeFields.Contains(Field.AreaName) && string.IsNullOrWhiteSpace(areaName))
areaName = "rom";
xtw.WriteStartElement("dataarea");
xtw.WriteAttributeString("name", areaName);
- if (!Header.ExcludeFields[(int)Field.AreaSize] && rom.AreaSize != null)
+ if (!Header.ExcludeFields.Contains(Field.AreaSize) && rom.AreaSize != null)
xtw.WriteAttributeString("size", rom.AreaSize.ToString());
xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields));
- if (!Header.ExcludeFields[(int)Field.Size] && rom.Size != -1)
+ if (!Header.ExcludeFields.Contains(Field.Size) && rom.Size != -1)
xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -872,7 +872,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("offset", rom.Offset);
//if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, DatHeader.ExcludeFields)))
// xtw.WriteAttributeString("value", rom.Value);
- if (!Header.ExcludeFields[(int)Field.Status] && rom.ItemStatus != ItemStatus.None)
+ if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
//if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Loadflag, DatHeader.ExcludeFields)))
// xtw.WriteAttributeString("loadflag", rom.Loadflag);
diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs
index fddf9e6f..2411722c 100644
--- a/SabreTools.Library/DatItems/DatItem.cs
+++ b/SabreTools.Library/DatItems/DatItem.cs
@@ -613,10 +613,10 @@ namespace SabreTools.Library.DatItems
///
/// Get the value of that field as a string, if possible
///
- public string GetField(Field field, bool[] excludeFields)
+ public string GetField(Field field, List excludeFields)
{
// If the field is to be excluded, return empty string
- if (excludeFields[(int)field])
+ if (excludeFields.Contains(field))
return string.Empty;
string fieldValue = null;
diff --git a/SabreTools/SabreTools.Help.cs b/SabreTools/SabreTools.Help.cs
index a4314cf0..0ece9244 100644
--- a/SabreTools/SabreTools.Help.cs
+++ b/SabreTools/SabreTools.Help.cs
@@ -2231,7 +2231,7 @@ Some special strings that can be used:
foreach (string fieldName in GetList(features, ExcludeFieldListValue))
{
- datHeader.ExcludeFields[(int)fieldName.AsField()] = true;
+ datHeader.ExcludeFields.Add(fieldName.AsField());
}
return datHeader;