diff --git a/InfoPrint/Features/MainFeature.cs b/InfoPrint/Features/MainFeature.cs index 57fb3fc7..4c1bf7d2 100644 --- a/InfoPrint/Features/MainFeature.cs +++ b/InfoPrint/Features/MainFeature.cs @@ -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) diff --git a/SabreTools.Serialization.Test/CrossModel/ClrMameProTests.cs b/SabreTools.Serialization.Test/CrossModel/ClrMameProTests.cs index eeca3343..e8584656 100644 --- a/SabreTools.Serialization.Test/CrossModel/ClrMameProTests.cs +++ b/SabreTools.Serialization.Test/CrossModel/ClrMameProTests.cs @@ -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); diff --git a/SabreTools.Serialization.Test/CrossModel/LogiqxTests.cs b/SabreTools.Serialization.Test/CrossModel/LogiqxTests.cs index 22b35e17..dda71bc9 100644 --- a/SabreTools.Serialization.Test/CrossModel/LogiqxTests.cs +++ b/SabreTools.Serialization.Test/CrossModel/LogiqxTests.cs @@ -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); diff --git a/SabreTools.Serialization.Test/Readers/ClrMameProTests.cs b/SabreTools.Serialization.Test/Readers/ClrMameProTests.cs index 44c70898..72888b71 100644 --- a/SabreTools.Serialization.Test/Readers/ClrMameProTests.cs +++ b/SabreTools.Serialization.Test/Readers/ClrMameProTests.cs @@ -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); diff --git a/SabreTools.Serialization.Test/Readers/LogiqxTests.cs b/SabreTools.Serialization.Test/Readers/LogiqxTests.cs index 5b1e09b6..ebdcccaa 100644 --- a/SabreTools.Serialization.Test/Readers/LogiqxTests.cs +++ b/SabreTools.Serialization.Test/Readers/LogiqxTests.cs @@ -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", diff --git a/SabreTools.Serialization/CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization/CrossModel/ClrMamePro.Deserializer.cs index c9d1cb12..da352bd7 100644 --- a/SabreTools.Serialization/CrossModel/ClrMamePro.Deserializer.cs +++ b/SabreTools.Serialization/CrossModel/ClrMamePro.Deserializer.cs @@ -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), diff --git a/SabreTools.Serialization/CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization/CrossModel/ClrMamePro.Serializer.cs index 24c06ada..73e720f3 100644 --- a/SabreTools.Serialization/CrossModel/ClrMamePro.Serializer.cs +++ b/SabreTools.Serialization/CrossModel/ClrMamePro.Serializer.cs @@ -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, diff --git a/SabreTools.Serialization/CrossModel/Logiqx.Deserializer.cs b/SabreTools.Serialization/CrossModel/Logiqx.Deserializer.cs index caa7c7ee..b4f47278 100644 --- a/SabreTools.Serialization/CrossModel/Logiqx.Deserializer.cs +++ b/SabreTools.Serialization/CrossModel/Logiqx.Deserializer.cs @@ -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), diff --git a/SabreTools.Serialization/CrossModel/Logiqx.Serializer.cs b/SabreTools.Serialization/CrossModel/Logiqx.Serializer.cs index 79c07f09..1d429938 100644 --- a/SabreTools.Serialization/CrossModel/Logiqx.Serializer.cs +++ b/SabreTools.Serialization/CrossModel/Logiqx.Serializer.cs @@ -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, diff --git a/SabreTools.Serialization/Models/ClrMamePro/Rom.cs b/SabreTools.Serialization/Models/ClrMamePro/Rom.cs index cc288099..48cb1ce9 100644 --- a/SabreTools.Serialization/Models/ClrMamePro/Rom.cs +++ b/SabreTools.Serialization/Models/ClrMamePro/Rom.cs @@ -36,7 +36,13 @@ namespace SabreTools.Data.Models.ClrMamePro #region Hash Extensions - /// md2; Appears after CRC + /// crc16; Appears before CRC + public string? CRC16 { get; set; } + + /// crc64; Appears after CRC + public string? CRC64 { get; set; } + + /// md2; Appears after CRC64 public string? MD2 { get; set; } /// md4; Appears after MD2 @@ -102,4 +108,4 @@ namespace SabreTools.Data.Models.ClrMamePro #endregion } -} \ No newline at end of file +} diff --git a/SabreTools.Serialization/Models/Logiqx/Rom.cs b/SabreTools.Serialization/Models/Logiqx/Rom.cs index 0787db31..2b92b639 100644 --- a/SabreTools.Serialization/Models/Logiqx/Rom.cs +++ b/SabreTools.Serialization/Models/Logiqx/Rom.cs @@ -15,9 +15,17 @@ namespace SabreTools.Data.Models.Logiqx [XmlAttribute("size")] public string? Size { get; set; } + /// Hash extension + [XmlAttribute("crc16")] + public string? CRC16 { get; set; } + [XmlAttribute("crc")] public string? CRC { get; set; } + /// Hash extension + [XmlAttribute("crc64")] + public string? CRC64 { get; set; } + /// Hash extension [XmlAttribute("md2")] public string? MD2 { get; set; } @@ -90,4 +98,4 @@ namespace SabreTools.Data.Models.Logiqx [XmlAttribute("mia")] public string? MIA { get; set; } } -} \ No newline at end of file +} diff --git a/SabreTools.Serialization/Models/Metadata/Rom.cs b/SabreTools.Serialization/Models/Metadata/Rom.cs index 0bd39552..728b0009 100644 --- a/SabreTools.Serialization/Models/Metadata/Rom.cs +++ b/SabreTools.Serialization/Models/Metadata/Rom.cs @@ -50,6 +50,12 @@ namespace SabreTools.Data.Models.Metadata /// string; Also "crc32" in ArchiveDotOrg.File public const string CRCKey = "crc"; + /// string + public const string CRC16Key = "crc16"; + + /// string + public const string CRC64Key = "crc64"; + /// string; ArchiveDotOrg.File public const string CreatorKey = "creator"; diff --git a/SabreTools.Serialization/Readers/ClrMamePro.cs b/SabreTools.Serialization/Readers/ClrMamePro.cs index 9f6b575c..cf106326 100644 --- a/SabreTools.Serialization/Readers/ClrMamePro.cs +++ b/SabreTools.Serialization/Readers/ClrMamePro.cs @@ -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; diff --git a/SabreTools.Serialization/Writers/ClrMamePro.cs b/SabreTools.Serialization/Writers/ClrMamePro.cs index ae53084d..7e9fe953 100644 --- a/SabreTools.Serialization/Writers/ClrMamePro.cs +++ b/SabreTools.Serialization/Writers/ClrMamePro.cs @@ -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);