Remove unnecessary complexity

This commit is contained in:
Matt Nadareski
2020-07-27 15:21:59 -07:00
parent 5e1a10c797
commit 22f8fb03e9
13 changed files with 308 additions and 67 deletions

View File

@@ -709,7 +709,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields)); cmpw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(biosSet.GetField(Field.BiosDescription, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(biosSet.GetField(Field.BiosDescription, Header.ExcludeFields)))
cmpw.WriteAttributeString("description", biosSet.Description); 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.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
@@ -732,7 +732,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant()); cmpw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
cmpw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant()); 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.WriteAttributeString("flags", disk.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
@@ -747,7 +747,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("language", release.Language); cmpw.WriteAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
cmpw.WriteAttributeString("date", release.Date); 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.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;
@@ -756,7 +756,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom; var rom = datItem as Rom;
cmpw.WriteStartElement("rom"); cmpw.WriteStartElement("rom");
cmpw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields)); 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()); cmpw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
cmpw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant()); cmpw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -776,7 +776,7 @@ namespace SabreTools.Library.DatFiles
cmpw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant()); cmpw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
cmpw.WriteAttributeString("date", rom.Date); 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.WriteAttributeString("flags", rom.ItemStatus.ToString().ToLowerInvariant());
cmpw.WriteEndElement(); cmpw.WriteEndElement();
break; break;

View File

@@ -450,7 +450,7 @@ namespace SabreTools.Library.DatFiles
/// <param name="filter">Filter object to be passed to the DatItem level</param> /// <param name="filter">Filter object to be passed to the DatItem level</param>
/// <param name="updateFields">List of Fields representing what should be updated [only for base replacement]</param> /// <param name="updateFields">List of Fields representing what should be updated [only for base replacement]</param>
/// <param name="onlySame">True if descriptions should only be replaced if the game name is the same, false otherwise</param> /// <param name="onlySame">True if descriptions should only be replaced if the game name is the same, false otherwise</param>
private void BaseReplace( internal void BaseReplace(
List<ParentablePath> inputs, List<ParentablePath> inputs,
string outDir, string outDir,
bool inplace, bool inplace,
@@ -937,7 +937,7 @@ namespace SabreTools.Library.DatFiles
/// <param name="inputs">Names of the input files</param> /// <param name="inputs">Names of the input files</param>
/// <param name="outDir">Optional param for output directory</param> /// <param name="outDir">Optional param for output directory</param>
/// <param name="inplace">True if the output files should overwrite their inputs, false otherwise</param> /// <param name="inplace">True if the output files should overwrite their inputs, false otherwise</param>
private void DiffAgainst(List<ParentablePath> inputs, string outDir, bool inplace) internal void DiffAgainst(List<ParentablePath> inputs, string outDir, bool inplace)
{ {
// For comparison's sake, we want to use CRC as the base ordering // For comparison's sake, we want to use CRC as the base ordering
Items.BucketBy(BucketedBy.CRC, DedupeType.Full); Items.BucketBy(BucketedBy.CRC, DedupeType.Full);
@@ -989,7 +989,7 @@ namespace SabreTools.Library.DatFiles
/// <param name="outDir">Output directory to write the DATs to</param> /// <param name="outDir">Output directory to write the DATs to</param>
/// <param name="inplace">True if cascaded diffs are outputted in-place, false otherwise</param> /// <param name="inplace">True if cascaded diffs are outputted in-place, false otherwise</param>
/// <param name="skip">True if the first cascaded diff file should be skipped on output, false otherwise</param> /// <param name="skip">True if the first cascaded diff file should be skipped on output, false otherwise</param>
private void DiffCascade( internal void DiffCascade(
List<ParentablePath> inputs, List<ParentablePath> inputs,
List<DatHeader> datHeaders, List<DatHeader> datHeaders,
string outDir, string outDir,
@@ -1077,7 +1077,7 @@ namespace SabreTools.Library.DatFiles
/// <param name="inputs">List of inputs to write out from</param> /// <param name="inputs">List of inputs to write out from</param>
/// <param name="outDir">Output directory to write the DATs to</param> /// <param name="outDir">Output directory to write the DATs to</param>
/// <param name="diff">Non-zero flag for diffing mode, zero otherwise</param> /// <param name="diff">Non-zero flag for diffing mode, zero otherwise</param>
private void DiffNoCascade(List<ParentablePath> inputs, string outDir, UpdateMode diff) internal void DiffNoCascade(List<ParentablePath> inputs, string outDir, UpdateMode diff)
{ {
InternalStopwatch watch = new InternalStopwatch("Initializing all output DATs"); InternalStopwatch watch = new InternalStopwatch("Initializing all output DATs");
@@ -1223,7 +1223,7 @@ namespace SabreTools.Library.DatFiles
/// </summary> /// </summary>
/// <param name="inputs">List of inputs to write out from</param> /// <param name="inputs">List of inputs to write out from</param>
/// <param name="outDir">Output directory to write the DATs to</param> /// <param name="outDir">Output directory to write the DATs to</param>
private void MergeNoDiff(List<ParentablePath> inputs, string outDir) internal void MergeNoDiff(List<ParentablePath> inputs, string outDir)
{ {
// If we're in SuperDAT mode, prefix all games with their respective DATs // If we're in SuperDAT mode, prefix all games with their respective DATs
if (Header.Type == "SuperDAT") if (Header.Type == "SuperDAT")
@@ -1262,7 +1262,7 @@ namespace SabreTools.Library.DatFiles
/// <param name="inputs">Paths to DATs to parse</param> /// <param name="inputs">Paths to DATs to parse</param>
/// <param name="filter">Filter object to be passed to the DatItem level</param> /// <param name="filter">Filter object to be passed to the DatItem level</param>
/// <returns>List of DatData objects representing headers</returns> /// <returns>List of DatData objects representing headers</returns>
private List<DatHeader> PopulateUserData(List<ParentablePath> inputs, Filter filter) internal List<DatHeader> PopulateUserData(List<ParentablePath> inputs, Filter filter)
{ {
DatFile[] datFiles = new DatFile[inputs.Count]; DatFile[] datFiles = new DatFile[inputs.Count];
InternalStopwatch watch = new InternalStopwatch("Processing individual DATs"); InternalStopwatch watch = new InternalStopwatch("Processing individual DATs");
@@ -1299,7 +1299,7 @@ namespace SabreTools.Library.DatFiles
/// <param name="outDir">Optional param for output directory</param> /// <param name="outDir">Optional param for output directory</param>
/// <param name="inplace">True if the output files should overwrite their inputs, false otherwise</param> /// <param name="inplace">True if the output files should overwrite their inputs, false otherwise</param>
/// <param name="filter">Filter object to be passed to the DatItem level</param> /// <param name="filter">Filter object to be passed to the DatItem level</param>
private void Update(List<ParentablePath> inputs, string outDir, bool inplace, Filter filter) internal void Update(List<ParentablePath> inputs, string outDir, bool inplace, Filter filter)
{ {
// Iterate over the files // Iterate over the files
foreach (ParentablePath file in inputs) foreach (ParentablePath file in inputs)
@@ -1335,6 +1335,19 @@ namespace SabreTools.Library.DatFiles
return datFile; return datFile;
} }
/// <summary>
/// Parse a DAT and return all found games and roms within
/// </summary>
/// <param name="filename">Name of the file to be parsed</param>
/// <param name="indexId">Index ID for the DAT</param>
/// <param name="keep">True if full pathnames are to be kept, false otherwise (default)</param>
/// <param name="keepext">True if original extension should be kept, false otherwise (default)</param>
public void Parse(string filename, int indexId = 0, bool keep = false, bool keepext = false)
{
ParentablePath path = new ParentablePath(filename);
Parse(path, indexId, keep, keepext);
}
/// <summary> /// <summary>
/// Parse a DAT and return all found games and roms within /// Parse a DAT and return all found games and roms within
/// </summary> /// </summary>

View File

@@ -126,10 +126,10 @@ namespace SabreTools.Library.DatFiles
public DatFormat DatFormat { get; set; } public DatFormat DatFormat { get; set; }
/// <summary> /// <summary>
/// List of fields in machine and items to exclude from writing /// Dictionary of fields in machine and items to exclude from writing
/// </summary> /// </summary>
[JsonIgnore] [JsonIgnore]
public bool[] ExcludeFields { get; set; } = new bool[Enum.GetNames(typeof(Field)).Length]; public List<Field> ExcludeFields { get; set; } = new List<Field>();
/// <summary> /// <summary>
/// Enable "One Rom, One Region (1G1R)" mode /// Enable "One Rom, One Region (1G1R)" mode

View File

@@ -468,7 +468,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom; var rom = datItem as Rom;
cmpw.WriteStartElement("file"); cmpw.WriteStartElement("file");
cmpw.WriteAttributeString("name", datItem.GetField(Field.Name, Header.ExcludeFields)); 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()); cmpw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
cmpw.WriteAttributeString("date", rom.Date); cmpw.WriteAttributeString("date", rom.Date);

View File

@@ -287,6 +287,12 @@ namespace SabreTools.Library.DatFiles
/// </summary> /// </summary>
public bool RemoveUnicode { get; set; } public bool RemoveUnicode { get; set; }
/// <summary>
/// Remove fields based on Header values
/// </summary>
/// TODO: Remove in lieu of relying on Header value
public bool RemoveFields { get; set; }
/// <summary> /// <summary>
/// Include root directory when determing trim sizes /// Include root directory when determing trim sizes
/// </summary> /// </summary>
@@ -877,6 +883,10 @@ namespace SabreTools.Library.DatFiles
// Run the one rom per game logic, if required // Run the one rom per game logic, if required
if (datFile.Header.OneRom) if (datFile.Header.OneRom)
OneRomPerGame(datFile); OneRomPerGame(datFile);
// If we are removing fields, do that now
if (RemoveFields)
RemoveFieldsFromItems(datFile);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -987,6 +997,10 @@ namespace SabreTools.Library.DatFiles
// Run the one rom per game logic, if required // Run the one rom per game logic, if required
if (outDat.Header.OneRom) if (outDat.Header.OneRom)
OneRomPerGame(outDat); OneRomPerGame(outDat);
// If we are removing fields, do that now
if (RemoveFields)
RemoveFieldsFromItems(outDat);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -2061,6 +2075,220 @@ namespace SabreTools.Library.DatFiles
}); });
} }
/// <summary>
/// Remove fields as per the header
/// </summary>
/// <param name="datFile">DatFile to filter</param>
private void RemoveFieldsFromItems(DatFile datFile)
{
// Output the logging statement
Globals.Logger.User("Removing filtered fields");
// Get the array of fields from the header
List<Field> fields = datFile.Header.ExcludeFields;
// Now process all of the roms
Parallel.ForEach(datFile.Items.Keys, Globals.ParallelOptions, key =>
{
List<DatItem> 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);
});
}
/// <summary> /// <summary>
/// Strip the dates from the beginning of scene-style set names /// Strip the dates from the beginning of scene-style set names
/// </summary> /// </summary>

View File

@@ -1043,7 +1043,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("sampleof"); jtw.WritePropertyName("sampleof");
jtw.WriteValue(datItem.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) if (datItem.Supported == true)
{ {
@@ -1061,7 +1061,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("sourcefile"); jtw.WritePropertyName("sourcefile");
jtw.WriteValue(datItem.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) if (datItem.Runnable == true)
{ {
@@ -1120,7 +1120,7 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray(); jtw.WriteEndArray();
} }
if (!Header.ExcludeFields[(int)Field.MachineType]) if (!Header.ExcludeFields.Contains(Field.MachineType))
{ {
if (datItem.MachineType.HasFlag(MachineType.Bios)) if (datItem.MachineType.HasFlag(MachineType.Bios))
{ {
@@ -1223,7 +1223,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("description"); jtw.WritePropertyName("description");
jtw.WriteValue(biosSet.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.WritePropertyName("default");
jtw.WriteValue(biosSet.Default); jtw.WriteValue(biosSet.Default);
@@ -1287,7 +1287,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("writable"); jtw.WritePropertyName("writable");
jtw.WriteValue(disk.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.WritePropertyName("status");
jtw.WriteValue(disk.ItemStatus.ToString().ToLowerInvariant()); jtw.WriteValue(disk.ItemStatus.ToString().ToLowerInvariant());
@@ -1319,7 +1319,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("date"); jtw.WritePropertyName("date");
jtw.WriteValue(release.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.WritePropertyName("default");
jtw.WriteValue(release.Default); jtw.WriteValue(release.Default);
@@ -1331,7 +1331,7 @@ namespace SabreTools.Library.DatFiles
jtw.WriteValue("rom"); jtw.WriteValue("rom");
jtw.WritePropertyName("name"); jtw.WritePropertyName("name");
jtw.WriteValue(rom.GetField(Field.Name, Header.ExcludeFields)); 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.WritePropertyName("size");
jtw.WriteValue(rom.Size); jtw.WriteValue(rom.Size);
@@ -1398,7 +1398,7 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("date"); jtw.WritePropertyName("date");
jtw.WriteValue(rom.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.WritePropertyName("status");
jtw.WriteValue(rom.ItemStatus.ToString().ToLowerInvariant()); jtw.WriteValue(rom.ItemStatus.ToString().ToLowerInvariant());

View File

@@ -399,11 +399,11 @@ namespace SabreTools.Library.DatFiles
sw.Write($"{disk.Name} "); sw.Write($"{disk.Name} ");
// If we have a baddump, put the first indicator // 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"); sw.Write(" BAD");
// If we have a nodump, write out the indicator // 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"); sw.Write(" NO GOOD DUMP KNOWN");
// Otherwise, write out the SHA-1 hash // Otherwise, write out the SHA-1 hash
@@ -411,7 +411,7 @@ namespace SabreTools.Library.DatFiles
sw.Write($" SHA1({disk.SHA1})"); sw.Write($" SHA1({disk.SHA1})");
// If we have a baddump, put the second indicator // 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(" BAD_DUMP");
sw.Write("\n"); sw.Write("\n");
@@ -431,11 +431,11 @@ namespace SabreTools.Library.DatFiles
sw.Write(rom.Size); sw.Write(rom.Size);
// If we have a baddump, put the first indicator // 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"); sw.Write(" BAD");
// If we have a nodump, write out the indicator // 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"); sw.Write(" NO GOOD DUMP KNOWN");
} }
@@ -449,7 +449,7 @@ namespace SabreTools.Library.DatFiles
} }
// If we have a baddump, put the second indicator // 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(" BAD_DUMP");
sw.Write("\n"); sw.Write("\n");

View File

@@ -681,7 +681,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SourceFile, Header.ExcludeFields)))
xtw.WriteElementString("sourcefile", datItem.SourceFile); xtw.WriteElementString("sourcefile", datItem.SourceFile);
if (!Header.ExcludeFields[(int)Field.MachineType]) if (!Header.ExcludeFields.Contains(Field.MachineType))
{ {
if (datItem.MachineType.HasFlag(MachineType.Bios)) if (datItem.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes"); xtw.WriteAttributeString("isbios", "yes");
@@ -691,7 +691,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("ismechanical", "yes"); xtw.WriteAttributeString("ismechanical", "yes");
} }
if (!Header.ExcludeFields[(int)Field.Runnable]) if (!Header.ExcludeFields.Contains(Field.Runnable))
{ {
if (datItem.Runnable == true) if (datItem.Runnable == true)
xtw.WriteAttributeString("runnable", "yes"); xtw.WriteAttributeString("runnable", "yes");
@@ -715,7 +715,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
xtw.WriteElementString("category", datItem.Category); 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<string, string> kvp in datItem.Infos) foreach (KeyValuePair<string, string> kvp in datItem.Infos)
{ {
@@ -787,7 +787,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields)); xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
xtw.WriteAttributeString("description", biosSet.Description); 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.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -816,11 +816,11 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("region", disk.Region); xtw.WriteAttributeString("region", disk.Region);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Index, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Index, Header.ExcludeFields)))
xtw.WriteAttributeString("index", disk.Index); 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"); 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()); 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.WriteAttributeString("optional", disk.Optional == true ? "yes" : "no");
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -829,7 +829,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom; var rom = datItem as Rom;
xtw.WriteStartElement("rom"); xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields)); 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()); xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -855,9 +855,9 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("region", rom.Region); xtw.WriteAttributeString("region", rom.Region);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Offset, Header.ExcludeFields)))
xtw.WriteAttributeString("offset", rom.Offset); 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()); 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.WriteAttributeString("optional", rom.Optional == true ? "yes" : "no");
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;

View File

@@ -859,7 +859,7 @@ namespace SabreTools.Library.DatFiles
// Build the state based on excluded fields // Build the state based on excluded fields
xtw.WriteStartElement(_deprecated ? "game" : "machine"); xtw.WriteStartElement(_deprecated ? "game" : "machine");
xtw.WriteAttributeString("name", datItem.GetField(Field.MachineName, Header.ExcludeFields)); 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)) if (datItem.MachineType.HasFlag(MachineType.Bios))
xtw.WriteAttributeString("isbios", "yes"); xtw.WriteAttributeString("isbios", "yes");
@@ -869,7 +869,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("ismechanical", "yes"); 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) if (datItem.Runnable == true)
xtw.WriteAttributeString("runnable", "yes"); xtw.WriteAttributeString("runnable", "yes");
@@ -964,7 +964,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields)); xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
xtw.WriteAttributeString("description", biosSet.Description); 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.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -987,7 +987,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant()); xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant()); 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.WriteAttributeString("status", disk.ItemStatus.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -1002,7 +1002,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("language", release.Language); xtw.WriteAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", release.Date); 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.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -1011,7 +1011,7 @@ namespace SabreTools.Library.DatFiles
var rom = datItem as Rom; var rom = datItem as Rom;
xtw.WriteStartElement("rom"); xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields)); 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()); xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -1031,7 +1031,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant()); xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", rom.Date); 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.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;

View File

@@ -777,8 +777,8 @@ namespace SabreTools.Library.DatFiles
for (int i = (last == -1 ? 0 : last); i < newsplit.Count; i++) for (int i = (last == -1 ? 0 : last); i < newsplit.Count; i++)
{ {
xtw.WriteStartElement("directory"); xtw.WriteStartElement("directory");
xtw.WriteAttributeString("name", !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[(int)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; 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)); xtw.WriteAttributeString("name", biosSet.GetField(Field.Name, Header.ExcludeFields));
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.BiosDescription, Header.ExcludeFields)))
xtw.WriteAttributeString("description", biosSet.Description); 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.WriteAttributeString("default", biosSet.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -903,7 +903,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant()); xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant()); 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"); xtw.WriteStartElement("flags");
@@ -929,7 +929,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("language", release.Language); xtw.WriteAttributeString("language", release.Language);
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", release.Date); 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.WriteAttributeString("default", release.Default.ToString().ToLowerInvariant());
xtw.WriteEndElement(); xtw.WriteEndElement();
break; break;
@@ -939,7 +939,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("file"); xtw.WriteStartElement("file");
xtw.WriteAttributeString("type", "rom"); xtw.WriteAttributeString("type", "rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields)); 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()); xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -959,7 +959,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant()); xtw.WriteAttributeString("sha512", rom.SHA512.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Date, Header.ExcludeFields)))
xtw.WriteAttributeString("date", rom.Date); 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"); xtw.WriteStartElement("flags");

View File

@@ -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)) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CloneOf, Header.ExcludeFields)) && !string.Equals(datItem.MachineName, datItem.CloneOf, StringComparison.OrdinalIgnoreCase))
xtw.WriteAttributeString("cloneof", datItem.CloneOf); xtw.WriteAttributeString("cloneof", datItem.CloneOf);
if (!Header.ExcludeFields[(int)Field.Supported]) if (!Header.ExcludeFields.Contains(Field.Supported))
{ {
if (datItem.Supported == true) if (datItem.Supported == true)
xtw.WriteAttributeString("supported", "yes"); xtw.WriteAttributeString("supported", "yes");
@@ -720,7 +720,7 @@ namespace SabreTools.Library.DatFiles
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Category, Header.ExcludeFields)))
xtw.WriteElementString("category", datItem.Category); 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<string, string> kvp in datItem.Infos) foreach (KeyValuePair<string, string> kvp in datItem.Infos)
{ {
@@ -788,7 +788,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("name", datItem.GetField(Field.PartName, Header.ExcludeFields)); xtw.WriteAttributeString("name", datItem.GetField(Field.PartName, Header.ExcludeFields));
xtw.WriteAttributeString("interface", datItem.GetField(Field.PartInterface, 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<string, string> kvp in datItem.Features) foreach (KeyValuePair<string, string> kvp in datItem.Features)
{ {
@@ -804,12 +804,12 @@ namespace SabreTools.Library.DatFiles
{ {
case ItemType.Disk: case ItemType.Disk:
var disk = datItem as 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"; areaName = "cdrom";
xtw.WriteStartElement("diskarea"); xtw.WriteStartElement("diskarea");
xtw.WriteAttributeString("name", areaName); 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.WriteAttributeString("size", disk.AreaSize.ToString());
xtw.WriteStartElement("disk"); xtw.WriteStartElement("disk");
@@ -828,9 +828,9 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant()); xtw.WriteAttributeString("sha384", disk.SHA384.ToLowerInvariant());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.SHA512, Header.ExcludeFields)))
xtw.WriteAttributeString("sha512", disk.SHA512.ToLowerInvariant()); 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.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.WriteAttributeString("writable", disk.Writable == true ? "yes" : "no");
xtw.WriteEndElement(); xtw.WriteEndElement();
@@ -840,17 +840,17 @@ namespace SabreTools.Library.DatFiles
case ItemType.Rom: case ItemType.Rom:
var rom = datItem as 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"; areaName = "rom";
xtw.WriteStartElement("dataarea"); xtw.WriteStartElement("dataarea");
xtw.WriteAttributeString("name", areaName); 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.WriteAttributeString("size", rom.AreaSize.ToString());
xtw.WriteStartElement("rom"); xtw.WriteStartElement("rom");
xtw.WriteAttributeString("name", rom.GetField(Field.Name, Header.ExcludeFields)); 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()); xtw.WriteAttributeString("size", rom.Size.ToString());
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields))) if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.CRC, Header.ExcludeFields)))
xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant()); xtw.WriteAttributeString("crc", rom.CRC.ToLowerInvariant());
@@ -872,7 +872,7 @@ namespace SabreTools.Library.DatFiles
xtw.WriteAttributeString("offset", rom.Offset); xtw.WriteAttributeString("offset", rom.Offset);
//if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, DatHeader.ExcludeFields))) //if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Value, DatHeader.ExcludeFields)))
// xtw.WriteAttributeString("value", rom.Value); // 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()); xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
//if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Loadflag, DatHeader.ExcludeFields))) //if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Loadflag, DatHeader.ExcludeFields)))
// xtw.WriteAttributeString("loadflag", rom.Loadflag); // xtw.WriteAttributeString("loadflag", rom.Loadflag);

View File

@@ -613,10 +613,10 @@ namespace SabreTools.Library.DatItems
/// <summary> /// <summary>
/// Get the value of that field as a string, if possible /// Get the value of that field as a string, if possible
/// </summary> /// </summary>
public string GetField(Field field, bool[] excludeFields) public string GetField(Field field, List<Field> excludeFields)
{ {
// If the field is to be excluded, return empty string // If the field is to be excluded, return empty string
if (excludeFields[(int)field]) if (excludeFields.Contains(field))
return string.Empty; return string.Empty;
string fieldValue = null; string fieldValue = null;

View File

@@ -2231,7 +2231,7 @@ Some special strings that can be used:
foreach (string fieldName in GetList(features, ExcludeFieldListValue)) foreach (string fieldName in GetList(features, ExcludeFieldListValue))
{ {
datHeader.ExcludeFields[(int)fieldName.AsField()] = true; datHeader.ExcludeFields.Add(fieldName.AsField());
} }
return datHeader; return datHeader;