mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add support for inverted CRC flag
This commit is contained in:
@@ -480,6 +480,7 @@ namespace SabreTools.Library.DatFiles
|
||||
Field.Writable,
|
||||
Field.Optional,
|
||||
Field.Status,
|
||||
Field.Inverted,
|
||||
|
||||
Field.CRC,
|
||||
Field.MD5,
|
||||
@@ -682,6 +683,12 @@ namespace SabreTools.Library.DatFiles
|
||||
rom.ItemStatus = romDupe.ItemStatus;
|
||||
}
|
||||
|
||||
if (updateFields.Contains(Field.Inverted))
|
||||
{
|
||||
if (newDatItem.ItemType == ItemType.Rom)
|
||||
rom.Inverted = romDupe.Inverted;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Hash fields
|
||||
|
||||
@@ -254,6 +254,11 @@ namespace SabreTools.Library.DatFiles
|
||||
/// </summary>
|
||||
private FilterItem<string> Offset = new FilterItem<string>();
|
||||
|
||||
/// <summary>
|
||||
/// Include or exclude offsets
|
||||
/// </summary>
|
||||
private FilterItem<bool?> Inverted = new FilterItem<bool?>();
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion // Private instance variables
|
||||
@@ -779,6 +784,13 @@ namespace SabreTools.Library.DatFiles
|
||||
Offset.PositiveSet.Add(value);
|
||||
break;
|
||||
|
||||
case Field.Inverted:
|
||||
if (negate || value.Equals("false", StringComparison.OrdinalIgnoreCase))
|
||||
Inverted.Neutral = false;
|
||||
else
|
||||
Inverted.Neutral = true;
|
||||
break;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1318,6 +1330,10 @@ namespace SabreTools.Library.DatFiles
|
||||
if (this.Optional.MatchesNeutral(null, rom.Optional) == false)
|
||||
return false;
|
||||
|
||||
// Filter on inverted
|
||||
if (this.Inverted.MatchesNeutral(null, rom.Inverted) == false)
|
||||
return false;
|
||||
|
||||
break;
|
||||
|
||||
case ItemType.Sample:
|
||||
@@ -2268,6 +2284,11 @@ namespace SabreTools.Library.DatFiles
|
||||
if (item.ItemType == ItemType.Rom)
|
||||
(item as Rom).Offset = null;
|
||||
}
|
||||
if (field == Field.Inverted)
|
||||
{
|
||||
if (item.ItemType == ItemType.Rom)
|
||||
(item as Rom).Inverted = null;
|
||||
}
|
||||
}
|
||||
|
||||
items[j] = item;
|
||||
|
||||
@@ -492,7 +492,8 @@ namespace SabreTools.Library.DatFiles
|
||||
// Prepare internal variables
|
||||
bool? def = null,
|
||||
writable = null,
|
||||
optional = null;
|
||||
optional = null,
|
||||
inverted = null;
|
||||
long size = -1;
|
||||
long? areaSize = null;
|
||||
string name = null,
|
||||
@@ -588,6 +589,7 @@ namespace SabreTools.Library.DatFiles
|
||||
(datItem as Rom).Date = date;
|
||||
(datItem as Rom).ItemStatus = itemStatus ?? ItemStatus.None;
|
||||
(datItem as Rom).Optional = optional;
|
||||
(datItem as Rom).Inverted = inverted;
|
||||
}
|
||||
|
||||
ParseAddHelper(datItem);
|
||||
@@ -733,6 +735,10 @@ namespace SabreTools.Library.DatFiles
|
||||
bios = jtr.ReadAsString();
|
||||
break;
|
||||
|
||||
case "inverted":
|
||||
inverted = jtr.ReadAsBoolean();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1408,6 +1414,11 @@ namespace SabreTools.Library.DatFiles
|
||||
jtw.WritePropertyName("optional");
|
||||
jtw.WriteValue(rom.Optional);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(rom.GetField(Field.Inverted, Header.ExcludeFields)))
|
||||
{
|
||||
jtw.WritePropertyName("inverted");
|
||||
jtw.WriteValue(rom.Inverted);
|
||||
}
|
||||
break;
|
||||
|
||||
case ItemType.Sample:
|
||||
|
||||
@@ -447,6 +447,7 @@ namespace SabreTools.Library.DatFiles
|
||||
MergeTag = reader.GetAttribute("merge"),
|
||||
ItemStatus = reader.GetAttribute("status").AsItemStatus(),
|
||||
Date = Sanitizer.CleanDate(reader.GetAttribute("date")),
|
||||
Inverted = reader.GetAttribute("inverted").AsYesNo(),
|
||||
|
||||
IndexId = indexId,
|
||||
IndexSource = filename,
|
||||
@@ -1033,6 +1034,8 @@ namespace SabreTools.Library.DatFiles
|
||||
xtw.WriteAttributeString("date", rom.Date);
|
||||
if (!Header.ExcludeFields.Contains(Field.Status) && rom.ItemStatus != ItemStatus.None)
|
||||
xtw.WriteAttributeString("status", rom.ItemStatus.ToString().ToLowerInvariant());
|
||||
if (!Header.ExcludeFields.Contains(Field.Inverted) && rom.Inverted != null)
|
||||
xtw.WriteAttributeString("inverted", rom.Inverted.ToString().ToLowerInvariant());
|
||||
xtw.WriteEndElement();
|
||||
break;
|
||||
|
||||
|
||||
@@ -80,7 +80,8 @@ namespace SabreTools.Library.DatFiles
|
||||
|
||||
bool? def = null,
|
||||
writable = null,
|
||||
optional = null;
|
||||
optional = null,
|
||||
inverted = null;
|
||||
string name = null,
|
||||
partName = null,
|
||||
partInterface = null,
|
||||
@@ -410,6 +411,10 @@ namespace SabreTools.Library.DatFiles
|
||||
offset = string.IsNullOrWhiteSpace(value) ? offset : value;
|
||||
break;
|
||||
|
||||
case "DatItem.Inverted":
|
||||
offset = string.IsNullOrWhiteSpace(value) ? inverted : value;
|
||||
break;
|
||||
|
||||
#endregion
|
||||
|
||||
case "INVALID":
|
||||
@@ -544,6 +549,7 @@ namespace SabreTools.Library.DatFiles
|
||||
Date = date,
|
||||
ItemStatus = status,
|
||||
Optional = optional,
|
||||
Inverted = inverted,
|
||||
|
||||
IndexId = indexId,
|
||||
IndexSource = filename,
|
||||
@@ -844,6 +850,9 @@ namespace SabreTools.Library.DatFiles
|
||||
case "offset":
|
||||
return "DatItem.Offset";
|
||||
|
||||
case "inverted":
|
||||
return "DatItem.Inverted";
|
||||
|
||||
#endregion
|
||||
|
||||
default:
|
||||
|
||||
@@ -810,6 +810,10 @@ namespace SabreTools.Library.DatItems
|
||||
if (ItemType == ItemType.Rom)
|
||||
fieldValue = (this as Rom).Offset;
|
||||
break;
|
||||
case Field.Inverted:
|
||||
if (ItemType == ItemType.Rom)
|
||||
fieldValue = (this as Rom).Inverted?.ToString();
|
||||
break;
|
||||
|
||||
case Field.NULL:
|
||||
default:
|
||||
|
||||
@@ -148,6 +148,12 @@ namespace SabreTools.Library.DatItems
|
||||
[JsonProperty("optional")]
|
||||
public bool? Optional { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determine if the CRC32 hash is inverted
|
||||
/// </summary>
|
||||
[JsonProperty("inverted")]
|
||||
public bool? Inverted { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
@@ -408,6 +408,7 @@
|
||||
Size,
|
||||
CRC,
|
||||
Offset,
|
||||
Inverted,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -182,6 +182,8 @@ namespace SabreTools.Library.Tools
|
||||
return Field.Index;
|
||||
case "infos":
|
||||
return Field.Infos;
|
||||
case "inverted":
|
||||
return Field.Inverted;
|
||||
case "itemname":
|
||||
case "item-name":
|
||||
case "name":
|
||||
@@ -561,8 +563,10 @@ namespace SabreTools.Library.Tools
|
||||
switch (yesno?.ToLowerInvariant())
|
||||
{
|
||||
case "yes":
|
||||
case "true":
|
||||
return true;
|
||||
case "no":
|
||||
case "false":
|
||||
return false;
|
||||
case "partial":
|
||||
default:
|
||||
@@ -572,7 +576,9 @@ namespace SabreTools.Library.Tools
|
||||
return yesno?.ToLowerInvariant() switch
|
||||
{
|
||||
"yes" => true,
|
||||
"true" => true,
|
||||
"no" => false,
|
||||
"false" => false,
|
||||
"partial" => null,
|
||||
_ => null,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user