Add CRC-16 and CRC-64 dat support

This commit is contained in:
Matt Nadareski
2025-11-29 10:11:05 -05:00
parent 27a9b12bbf
commit 4b39ee8d00
14 changed files with 55 additions and 3 deletions

View File

@@ -247,6 +247,8 @@ namespace InfoPrint.Features
builder.AppendLine($"CRC-16 checksum: {crc16}");
if (hashes.TryGetValue(HashType.CRC32, out string? crc32) && crc32 != null)
builder.AppendLine($"CRC-32 checksum: {crc32}");
if (hashes.TryGetValue(HashType.CRC64, out string? crc64) && crc64 != null)
builder.AppendLine($"CRC-64 checksum: {crc64}");
if (hashes.TryGetValue(HashType.MD2, out string? md2) && md2 != null)
builder.AppendLine($"MD2 hash: {md2}");
if (hashes.TryGetValue(HashType.MD4, out string? md4) && md4 != null)

View File

@@ -97,7 +97,9 @@ namespace SabreTools.Serialization.Test.CrossModel
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC16 = "XXXXXX",
CRC = "XXXXXX",
CRC64 = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
@@ -350,7 +352,9 @@ namespace SabreTools.Serialization.Test.CrossModel
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC16);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.CRC64);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);

View File

@@ -150,7 +150,9 @@ namespace SabreTools.Serialization.Test.CrossModel
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC16 = "XXXXXX",
CRC = "XXXXXX",
CRC64 = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
@@ -464,7 +466,9 @@ namespace SabreTools.Serialization.Test.CrossModel
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC16);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.CRC64);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);

View File

@@ -214,7 +214,9 @@ namespace SabreTools.Serialization.Test.Readers
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC16 = "XXXXXX",
CRC = "XXXXXX",
CRC64 = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",
@@ -467,7 +469,9 @@ namespace SabreTools.Serialization.Test.Readers
Assert.NotNull(rom);
Assert.Equal("XXXXXX", rom.Name);
Assert.Equal("XXXXXX", rom.Size);
Assert.Equal("XXXXXX", rom.CRC16);
Assert.Equal("XXXXXX", rom.CRC);
Assert.Equal("XXXXXX", rom.CRC64);
Assert.Equal("XXXXXX", rom.MD2);
Assert.Equal("XXXXXX", rom.MD4);
Assert.Equal("XXXXXX", rom.MD5);

View File

@@ -215,7 +215,9 @@ namespace SabreTools.Serialization.Test.Readers
{
Name = "XXXXXX",
Size = "XXXXXX",
CRC16 = "XXXXXX",
CRC = "XXXXXX",
CRC64 = "XXXXXX",
MD2 = "XXXXXX",
MD4 = "XXXXXX",
MD5 = "XXXXXX",

View File

@@ -274,7 +274,9 @@ namespace SabreTools.Serialization.CrossModel
{
Name = item.ReadString(Data.Models.Metadata.Rom.NameKey),
Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey),
CRC16 = item.ReadString(Data.Models.Metadata.Rom.CRC16Key),
CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey),
CRC64 = item.ReadString(Data.Models.Metadata.Rom.CRC64Key),
MD2 = item.ReadString(Data.Models.Metadata.Rom.MD2Key),
MD4 = item.ReadString(Data.Models.Metadata.Rom.MD4Key),
MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key),

View File

@@ -289,7 +289,9 @@ namespace SabreTools.Serialization.CrossModel
{
[Data.Models.Metadata.Rom.NameKey] = item.Name,
[Data.Models.Metadata.Rom.SizeKey] = item.Size,
[Data.Models.Metadata.Rom.CRC16Key] = item.CRC16,
[Data.Models.Metadata.Rom.CRCKey] = item.CRC,
[Data.Models.Metadata.Rom.CRC64Key] = item.CRC64,
[Data.Models.Metadata.Rom.MD2Key] = item.MD2,
[Data.Models.Metadata.Rom.MD4Key] = item.MD4,
[Data.Models.Metadata.Rom.MD5Key] = item.MD5,

View File

@@ -301,7 +301,9 @@ namespace SabreTools.Serialization.CrossModel
{
Name = item.ReadString(Data.Models.Metadata.Rom.NameKey),
Size = item.ReadString(Data.Models.Metadata.Rom.SizeKey),
CRC16 = item.ReadString(Data.Models.Metadata.Rom.CRC16Key),
CRC = item.ReadString(Data.Models.Metadata.Rom.CRCKey),
CRC64 = item.ReadString(Data.Models.Metadata.Rom.CRC64Key),
MD2 = item.ReadString(Data.Models.Metadata.Rom.MD2Key),
MD4 = item.ReadString(Data.Models.Metadata.Rom.MD4Key),
MD5 = item.ReadString(Data.Models.Metadata.Rom.MD5Key),

View File

@@ -296,7 +296,9 @@ namespace SabreTools.Serialization.CrossModel
{
[Data.Models.Metadata.Rom.NameKey] = item.Name,
[Data.Models.Metadata.Rom.SizeKey] = item.Size,
[Data.Models.Metadata.Rom.CRC16Key] = item.CRC16,
[Data.Models.Metadata.Rom.CRCKey] = item.CRC,
[Data.Models.Metadata.Rom.CRC64Key] = item.CRC64,
[Data.Models.Metadata.Rom.MD2Key] = item.MD2,
[Data.Models.Metadata.Rom.MD4Key] = item.MD4,
[Data.Models.Metadata.Rom.MD5Key] = item.MD5,

View File

@@ -36,7 +36,13 @@ namespace SabreTools.Data.Models.ClrMamePro
#region Hash Extensions
/// <remarks>md2; Appears after CRC</remarks>
/// <remarks>crc16; Appears before CRC</remarks>
public string? CRC16 { get; set; }
/// <remarks>crc64; Appears after CRC</remarks>
public string? CRC64 { get; set; }
/// <remarks>md2; Appears after CRC64</remarks>
public string? MD2 { get; set; }
/// <remarks>md4; Appears after MD2</remarks>
@@ -102,4 +108,4 @@ namespace SabreTools.Data.Models.ClrMamePro
#endregion
}
}
}

View File

@@ -15,9 +15,17 @@ namespace SabreTools.Data.Models.Logiqx
[XmlAttribute("size")]
public string? Size { get; set; }
/// <remarks>Hash extension</remarks>
[XmlAttribute("crc16")]
public string? CRC16 { get; set; }
[XmlAttribute("crc")]
public string? CRC { get; set; }
/// <remarks>Hash extension</remarks>
[XmlAttribute("crc64")]
public string? CRC64 { get; set; }
/// <remarks>Hash extension</remarks>
[XmlAttribute("md2")]
public string? MD2 { get; set; }
@@ -90,4 +98,4 @@ namespace SabreTools.Data.Models.Logiqx
[XmlAttribute("mia")]
public string? MIA { get; set; }
}
}
}

View File

@@ -50,6 +50,12 @@ namespace SabreTools.Data.Models.Metadata
/// <remarks>string; Also "crc32" in ArchiveDotOrg.File</remarks>
public const string CRCKey = "crc";
/// <remarks>string</remarks>
public const string CRC16Key = "crc16";
/// <remarks>string</remarks>
public const string CRC64Key = "crc64";
/// <remarks>string; ArchiveDotOrg.File</remarks>
public const string CreatorKey = "creator";

View File

@@ -473,6 +473,12 @@ namespace SabreTools.Serialization.Readers
case "crc":
rom.CRC = kvp.Value;
break;
case "crc16":
rom.CRC16 = kvp.Value;
break;
case "crc64":
rom.CRC64 = kvp.Value;
break;
case "md2":
rom.MD2 = kvp.Value;
break;

View File

@@ -251,7 +251,9 @@ namespace SabreTools.Serialization.Writers
writer.WriteStartElement("rom");
writer.WriteRequiredAttributeString("name", rom.Name, throwOnError: true);
writer.WriteRequiredAttributeString("size", rom.Size, throwOnError: true);
writer.WriteOptionalAttributeString("crc16", rom.CRC16);
writer.WriteOptionalAttributeString("crc", rom.CRC);
writer.WriteOptionalAttributeString("crc64", rom.CRC64);
writer.WriteOptionalAttributeString("md2", rom.MD2);
writer.WriteOptionalAttributeString("md4", rom.MD4);
writer.WriteOptionalAttributeString("md5", rom.MD5);