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