mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-09-21 14:25:03 +00:00
OpenMSX has changed a bit
This commit is contained in:
@@ -192,6 +192,9 @@ namespace SabreTools.Data.Models.Metadata
|
||||
/// <remarks>(baddump|nodump|good|verified) "good"</remarks>
|
||||
public ItemStatus? Status { get; set; }
|
||||
|
||||
/// <remarks>Possibly enum; OpenMSX.RomBase</remarks>
|
||||
public string? StatusMisc { get; set; }
|
||||
|
||||
/// <remarks>ArchiveDotOrg.File</remarks>
|
||||
public string? Summation { get; set; }
|
||||
|
||||
@@ -353,6 +356,7 @@ namespace SabreTools.Data.Models.Metadata
|
||||
obj.SpamSum = SpamSum;
|
||||
obj.Start = Start;
|
||||
obj.Status = Status;
|
||||
obj.StatusMisc = StatusMisc;
|
||||
obj.Summation = Summation;
|
||||
obj.TesseractOCR = TesseractOCR;
|
||||
obj.TesseractOCRConverted = TesseractOCRConverted;
|
||||
|
||||
@@ -8,17 +8,29 @@ namespace SabreTools.Data.Models.OpenMSX
|
||||
/// </summary>
|
||||
public abstract class RomBase
|
||||
{
|
||||
[XmlElement("start")]
|
||||
public string? Start { get; set; }
|
||||
/// <remarks>
|
||||
/// "hash" in older versions, "sha1" in newer versions
|
||||
/// </remarks>
|
||||
[XmlElement("hash")]
|
||||
[XmlElement("sha1")]
|
||||
public string? SHA1 { get; set; }
|
||||
|
||||
[XmlElement("type")]
|
||||
public string? Type { get; set; }
|
||||
|
||||
/// <remarks>SHA-1 hash</remarks>
|
||||
[XmlElement("hash")]
|
||||
public string? Hash { get; set; }
|
||||
/// <remarks>
|
||||
/// Only present in newer versions
|
||||
/// </remarks>
|
||||
[XmlElement("status")]
|
||||
public string? Status { get; set; }
|
||||
|
||||
[XmlElement("remark")]
|
||||
public string? Remark { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Only present in older versions
|
||||
/// </remarks>
|
||||
[XmlElement("start")]
|
||||
public string? Start { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,30 +6,63 @@ namespace SabreTools.Data.Models.OpenMSX
|
||||
[XmlRoot("software")]
|
||||
public class Software
|
||||
{
|
||||
/// <remarks>
|
||||
/// Element in older versions and DTD, attribute in newer versions
|
||||
/// </remarks>
|
||||
[Required]
|
||||
[XmlAttribute("title")]
|
||||
[XmlElement("title")]
|
||||
public string? Title { get; set; }
|
||||
|
||||
[XmlElement("genmsxid")]
|
||||
public string? GenMSXID { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Element in older versions and DTD, attribute in newer versions
|
||||
/// </remarks>
|
||||
[Required]
|
||||
[XmlAttribute("system")]
|
||||
[XmlElement("system")]
|
||||
public string? System { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Element in older versions and DTD, attribute in newer versions
|
||||
/// </remarks>
|
||||
[Required]
|
||||
[XmlAttribute("company")]
|
||||
[XmlElement("company")]
|
||||
public string? Company { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Element in older versions and DTD, attribute in newer versions
|
||||
/// </remarks>
|
||||
[Required]
|
||||
[XmlAttribute("year")]
|
||||
[XmlElement("year")]
|
||||
public string? Year { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Element in older versions and DTD, attribute in newer versions
|
||||
/// </remarks>
|
||||
[Required]
|
||||
[XmlAttribute("country")]
|
||||
[XmlElement("country")]
|
||||
public string? Country { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Element in older versions and DTD, attribute in newer versions
|
||||
/// </remarks>
|
||||
[XmlAttribute("genmsxid")]
|
||||
[XmlElement("genmsxid")]
|
||||
public string? GenMSXID { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Present in older versions
|
||||
/// </remarks>
|
||||
[XmlElement("dump")]
|
||||
public Dump[]? Dump { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// Present in newer versions
|
||||
/// </remarks>
|
||||
[XmlElement("rom")]
|
||||
public RomBase[]? Rom { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -839,6 +839,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
SpamSum = HashType.SpamSum.ZeroString,
|
||||
Start = "start",
|
||||
Status = Data.Models.Metadata.ItemStatus.Good,
|
||||
StatusMisc = "status",
|
||||
Summation = "summation",
|
||||
TesseractOCR = "ocr",
|
||||
TesseractOCRConverted = "ocr_converted",
|
||||
@@ -1516,6 +1517,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.Equal(HashType.SpamSum.ZeroString, rom.SpamSum);
|
||||
Assert.Equal("start", rom.Start);
|
||||
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status);
|
||||
Assert.Equal("status", rom.StatusMisc);
|
||||
Assert.Equal("summation", rom.Summation);
|
||||
Assert.Equal("ocr", rom.TesseractOCR);
|
||||
Assert.Equal("ocr_converted", rom.TesseractOCRConverted);
|
||||
|
||||
@@ -1066,6 +1066,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.Equal(HashType.SpamSum.ZeroString, rom.SpamSum);
|
||||
Assert.Equal("start", rom.Start);
|
||||
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status);
|
||||
Assert.Equal("status", rom.StatusMisc);
|
||||
Assert.Equal("summation", rom.Summation);
|
||||
Assert.Equal("ocr", rom.TesseractOCR);
|
||||
Assert.Equal("ocr_converted", rom.TesseractOCRConverted);
|
||||
|
||||
@@ -29,17 +29,22 @@ namespace SabreTools.Metadata.DatFiles.Formats
|
||||
<![CDATA[
|
||||
The softwaredb.xml file contains information about rom mapper types
|
||||
|
||||
- Copyright 2003 Nicolas Beyaert (Initial Database)
|
||||
- Copyright 2004-2013 BlueMSX Team
|
||||
- Copyright 2005-2023 openMSX Team
|
||||
- Generation MSXIDs by www.generation-msx.nl
|
||||
Copyright 2003 Nicolas Beyaert (Initial Database)
|
||||
Copyright 2004-2013 BlueMSX Team
|
||||
Copyright 2005-2026 openMSX Team
|
||||
|
||||
- Thanks go out to:
|
||||
- - Generation MSX/Sylvester for the incredible source of information
|
||||
- p_gimeno and diedel for their help adding and valdiating ROM additions
|
||||
Generation MSXIDs by www.generation-msx.nl
|
||||
|
||||
Thanks go out to:
|
||||
- Generation MSX / Sylvester for the incredible source of information
|
||||
- p_gimeno and diedel for their help adding and validating ROM additions
|
||||
- GDX for additional ROM info and validations and corrections
|
||||
- TFH / Filehunter for his sharing of information
|
||||
- MP83 for deep dives into software and corrections
|
||||
- bsittler for preservation and sharing of information
|
||||
|
||||
|
||||
Important: This file is auto generated using a database.
|
||||
The Database is located at https://romdb.vampier.net/
|
||||
]]>";
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -442,6 +442,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
set => _internal.Status = value;
|
||||
}
|
||||
|
||||
public string? StatusMisc
|
||||
{
|
||||
get => _internal.StatusMisc;
|
||||
set => _internal.StatusMisc = value;
|
||||
}
|
||||
|
||||
public string? Summation
|
||||
{
|
||||
get => _internal.Summation;
|
||||
|
||||
@@ -1661,6 +1661,7 @@ namespace SabreTools.Metadata.Filter.Test
|
||||
[InlineData("rom.spamsum", "3::")]
|
||||
[InlineData("rom.start", "start")]
|
||||
[InlineData("rom.status", "good")]
|
||||
[InlineData("rom.status_misc", "status")]
|
||||
[InlineData("rom.summation", "summation")]
|
||||
[InlineData("rom.ocr", "ocr")]
|
||||
[InlineData("rom.tesseractocr", "ocr")]
|
||||
@@ -1785,6 +1786,7 @@ namespace SabreTools.Metadata.Filter.Test
|
||||
SpamSum = HashType.SpamSum.ZeroString,
|
||||
Start = "start",
|
||||
Status = ItemStatus.Good,
|
||||
StatusMisc = "status",
|
||||
Summation = "summation",
|
||||
TesseractOCR = "ocr",
|
||||
TesseractOCRConverted = "ocr_converted",
|
||||
|
||||
@@ -625,6 +625,7 @@ namespace SabreTools.Metadata.Filter
|
||||
"spamsum",
|
||||
"start",
|
||||
"status",
|
||||
"status_misc",
|
||||
"summation",
|
||||
"tesseractocr",
|
||||
"tesseractocrconverted",
|
||||
|
||||
@@ -2099,6 +2099,9 @@ namespace SabreTools.Metadata.Filter
|
||||
case "status":
|
||||
checkValue = obj.Status?.AsStringValue();
|
||||
return true;
|
||||
case "status_misc":
|
||||
checkValue = obj.StatusMisc;
|
||||
return true;
|
||||
case "summation":
|
||||
checkValue = obj.Summation;
|
||||
return true;
|
||||
|
||||
@@ -40,11 +40,19 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
Content = "content",
|
||||
};
|
||||
|
||||
var standalone_rom = new Data.Models.OpenMSX.Rom
|
||||
{
|
||||
SHA1 = "sha1",
|
||||
Type = "type",
|
||||
Status = "status",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
var rom = new Data.Models.OpenMSX.Rom
|
||||
{
|
||||
Start = "start",
|
||||
Type = "type",
|
||||
Hash = "hash",
|
||||
SHA1 = "hash",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
@@ -59,7 +67,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
{
|
||||
Start = "start",
|
||||
Type = "type",
|
||||
Hash = "hash",
|
||||
SHA1 = "hash",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
@@ -74,7 +82,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
{
|
||||
Start = "start",
|
||||
Type = "type",
|
||||
Hash = "hash",
|
||||
SHA1 = "hash",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
@@ -94,6 +102,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
Year = "year",
|
||||
Country = "country",
|
||||
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
|
||||
Rom = [standalone_rom],
|
||||
};
|
||||
|
||||
return new Data.Models.OpenMSX.SoftwareDb
|
||||
@@ -122,6 +131,10 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
{
|
||||
Validate(dump);
|
||||
}
|
||||
|
||||
Assert.NotNull(software.Rom);
|
||||
var rom = Assert.Single(software.Rom);
|
||||
ValidateStandalone(rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -154,7 +167,19 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
Assert.NotNull(rombase);
|
||||
Assert.Equal("start", rombase.Start);
|
||||
Assert.Equal("type", rombase.Type);
|
||||
Assert.Equal("hash", rombase.Hash);
|
||||
Assert.Equal("hash", rombase.SHA1);
|
||||
Assert.Equal("remark", rombase.Remark);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RomBase
|
||||
/// </summary>
|
||||
private static void ValidateStandalone(Data.Models.OpenMSX.RomBase? rombase)
|
||||
{
|
||||
Assert.NotNull(rombase);
|
||||
Assert.Equal("sha1", rombase.SHA1);
|
||||
Assert.Equal("type", rombase.Type);
|
||||
Assert.Equal("status", rombase.Status);
|
||||
Assert.Equal("remark", rombase.Remark);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,17 +41,21 @@ namespace SabreTools.Serialization.CrossModel
|
||||
var game = new Software
|
||||
{
|
||||
Title = item.Name,
|
||||
GenMSXID = item.GenMSXID,
|
||||
System = item.System,
|
||||
Company = item.Company,
|
||||
Year = item.Year,
|
||||
Country = item.Country,
|
||||
GenMSXID = item.GenMSXID,
|
||||
};
|
||||
|
||||
var dumps = item.Dump;
|
||||
if (dumps is not null && dumps.Length > 0)
|
||||
game.Dump = Array.ConvertAll(dumps, ConvertFromInternalModel);
|
||||
|
||||
var roms = item.Rom;
|
||||
if (roms is not null && roms.Length > 0)
|
||||
game.Rom = Array.ConvertAll(roms, ConvertRomFromInternalModel);
|
||||
|
||||
return game;
|
||||
}
|
||||
|
||||
@@ -90,10 +94,11 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
var megaRom = new MegaRom
|
||||
{
|
||||
Start = item.Start,
|
||||
SHA1 = item.SHA1,
|
||||
Type = item.OpenMSXType,
|
||||
Hash = item.SHA1,
|
||||
Status = item.StatusMisc,
|
||||
Remark = item.Remark,
|
||||
Start = item.Start,
|
||||
};
|
||||
return megaRom;
|
||||
}
|
||||
@@ -118,10 +123,11 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
var rom = new Rom
|
||||
{
|
||||
Start = item.Start,
|
||||
SHA1 = item.SHA1,
|
||||
Type = item.OpenMSXType,
|
||||
Hash = item.SHA1,
|
||||
Status = item.StatusMisc,
|
||||
Remark = item.Remark,
|
||||
Start = item.Start,
|
||||
};
|
||||
return rom;
|
||||
}
|
||||
@@ -133,10 +139,11 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
var sccPlusCart = new SCCPlusCart
|
||||
{
|
||||
Start = item.Start,
|
||||
SHA1 = item.SHA1,
|
||||
Type = item.OpenMSXType,
|
||||
Hash = item.SHA1,
|
||||
Status = item.StatusMisc,
|
||||
Remark = item.Remark,
|
||||
Start = item.Start,
|
||||
};
|
||||
return sccPlusCart;
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@ namespace SabreTools.Serialization.CrossModel
|
||||
if (item.Dump is not null && item.Dump.Length > 0)
|
||||
machine.Dump = Array.ConvertAll(item.Dump, ConvertToInternalModel);
|
||||
|
||||
if (item.Rom is not null && item.Rom.Length > 0)
|
||||
machine.Rom = Array.ConvertAll(item.Rom, ConvertToInternalModel);
|
||||
|
||||
return machine;
|
||||
}
|
||||
|
||||
@@ -112,10 +115,11 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
var rom = new Data.Models.Metadata.Rom
|
||||
{
|
||||
Start = item.Start,
|
||||
SHA1 = item.SHA1,
|
||||
OpenMSXType = item.Type,
|
||||
SHA1 = item.Hash,
|
||||
StatusMisc = item.Status,
|
||||
Remark = item.Remark,
|
||||
Start = item.Start,
|
||||
};
|
||||
return rom;
|
||||
}
|
||||
|
||||
@@ -106,11 +106,19 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
Content = "content",
|
||||
};
|
||||
|
||||
var standalone_rom = new Data.Models.OpenMSX.Rom
|
||||
{
|
||||
SHA1 = "sha1",
|
||||
Type = "type",
|
||||
Status = "status",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
var rom = new Data.Models.OpenMSX.Rom
|
||||
{
|
||||
Start = "start",
|
||||
Type = "type",
|
||||
Hash = "hash",
|
||||
SHA1 = "hash",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
@@ -125,7 +133,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
Start = "start",
|
||||
Type = "type",
|
||||
Hash = "hash",
|
||||
SHA1 = "hash",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
@@ -140,7 +148,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
Start = "start",
|
||||
Type = "type",
|
||||
Hash = "hash",
|
||||
SHA1 = "hash",
|
||||
Remark = "remark",
|
||||
};
|
||||
|
||||
@@ -160,6 +168,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
Year = "year",
|
||||
Country = "country",
|
||||
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
|
||||
Rom = [standalone_rom],
|
||||
};
|
||||
|
||||
return new Data.Models.OpenMSX.SoftwareDb
|
||||
@@ -188,6 +197,10 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
Validate(dump);
|
||||
}
|
||||
|
||||
Assert.NotNull(software.Rom);
|
||||
var rom = Assert.Single(software.Rom);
|
||||
ValidateStandalone(rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -220,7 +233,19 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
Assert.NotNull(rombase);
|
||||
Assert.Equal("start", rombase.Start);
|
||||
Assert.Equal("type", rombase.Type);
|
||||
Assert.Equal("hash", rombase.Hash);
|
||||
Assert.Equal("hash", rombase.SHA1);
|
||||
Assert.Equal("remark", rombase.Remark);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RomBase
|
||||
/// </summary>
|
||||
private static void ValidateStandalone(Data.Models.OpenMSX.RomBase? rombase)
|
||||
{
|
||||
Assert.NotNull(rombase);
|
||||
Assert.Equal("sha1", rombase.SHA1);
|
||||
Assert.Equal("type", rombase.Type);
|
||||
Assert.Equal("status", rombase.Status);
|
||||
Assert.Equal("remark", rombase.Remark);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,11 +253,12 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "start":
|
||||
if (obj.Start is not null && Debug)
|
||||
case "hash":
|
||||
case "sha1":
|
||||
if (obj.SHA1 is not null && Debug)
|
||||
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
|
||||
|
||||
obj.Start = reader.ReadElementContentAsString();
|
||||
obj.SHA1 = reader.ReadElementContentAsString();
|
||||
break;
|
||||
case "type":
|
||||
if (obj.Type is not null && Debug)
|
||||
@@ -265,11 +266,11 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
obj.Type = reader.ReadElementContentAsString();
|
||||
break;
|
||||
case "hash":
|
||||
if (obj.Hash is not null && Debug)
|
||||
case "status":
|
||||
if (obj.Status is not null && Debug)
|
||||
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
|
||||
|
||||
obj.Hash = reader.ReadElementContentAsString();
|
||||
obj.Status = reader.ReadElementContentAsString();
|
||||
break;
|
||||
case "remark":
|
||||
if (obj.Remark is not null && Debug)
|
||||
@@ -277,6 +278,12 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
obj.Remark = reader.ReadElementContentAsString();
|
||||
break;
|
||||
case "start":
|
||||
if (obj.Start is not null && Debug)
|
||||
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
|
||||
|
||||
obj.Start = reader.ReadElementContentAsString();
|
||||
break;
|
||||
|
||||
default:
|
||||
if (Debug) Console.Error.WriteLine($"Element '{reader.Name}' is not recognized");
|
||||
@@ -297,11 +304,19 @@ namespace SabreTools.Serialization.Readers
|
||||
{
|
||||
var obj = new Software();
|
||||
|
||||
obj.Title = reader.GetAttribute("title");
|
||||
obj.System = reader.GetAttribute("system");
|
||||
obj.Company = reader.GetAttribute("company");
|
||||
obj.Year = reader.GetAttribute("year");
|
||||
obj.Country = reader.GetAttribute("country");
|
||||
obj.GenMSXID = reader.GetAttribute("genmsxid");
|
||||
|
||||
// Handle empty elements
|
||||
if (reader.IsEmptyElement)
|
||||
return obj;
|
||||
|
||||
List<Dump> dumps = [];
|
||||
List<RomBase> roms = [];
|
||||
|
||||
reader.Read();
|
||||
while (!reader.EOF)
|
||||
@@ -369,6 +384,13 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
reader.Skip();
|
||||
break;
|
||||
case "rom":
|
||||
var rom = ParseRomBase(reader);
|
||||
if (rom is not null)
|
||||
roms.Add(rom);
|
||||
|
||||
reader.Skip();
|
||||
break;
|
||||
|
||||
default:
|
||||
if (Debug) Console.Error.WriteLine($"Element '{reader.Name}' is not recognized");
|
||||
@@ -379,6 +401,8 @@ namespace SabreTools.Serialization.Readers
|
||||
|
||||
if (dumps.Count > 0)
|
||||
obj.Dump = [.. dumps];
|
||||
if (roms.Count > 0)
|
||||
obj.Rom = [.. roms];
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
@@ -141,10 +141,11 @@ namespace SabreTools.Serialization.Writers
|
||||
else
|
||||
return;
|
||||
|
||||
writer.WriteOptionalElementString("start", obj.Start);
|
||||
writer.WriteOptionalElementString("sha1", obj.SHA1);
|
||||
writer.WriteOptionalElementString("type", obj.Type);
|
||||
writer.WriteOptionalElementString("hash", obj.Hash);
|
||||
writer.WriteOptionalElementString("status", obj.Status);
|
||||
writer.WriteOptionalElementString("remark", obj.Remark);
|
||||
writer.WriteOptionalElementString("start", obj.Start);
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
@@ -158,12 +159,12 @@ namespace SabreTools.Serialization.Writers
|
||||
{
|
||||
writer.WriteStartElement("software");
|
||||
|
||||
writer.WriteRequiredElementString("title", obj.Title);
|
||||
writer.WriteOptionalElementString("genmsxid", obj.GenMSXID);
|
||||
writer.WriteRequiredElementString("system", obj.System);
|
||||
writer.WriteRequiredElementString("company", obj.Company);
|
||||
writer.WriteRequiredElementString("year", obj.Year);
|
||||
writer.WriteRequiredElementString("country", obj.Country);
|
||||
writer.WriteRequiredAttributeString("title", obj.Title);
|
||||
writer.WriteRequiredAttributeString("system", obj.System);
|
||||
writer.WriteRequiredAttributeString("company", obj.Company);
|
||||
writer.WriteRequiredAttributeString("country", obj.Country);
|
||||
writer.WriteRequiredAttributeString("year", obj.Year);
|
||||
writer.WriteOptionalAttributeString("genmsxid", obj.GenMSXID);
|
||||
|
||||
if (obj.Dump is not null && obj.Dump.Length > 0)
|
||||
{
|
||||
@@ -173,6 +174,14 @@ namespace SabreTools.Serialization.Writers
|
||||
}
|
||||
}
|
||||
|
||||
if (obj.Rom is not null && obj.Rom.Length > 0)
|
||||
{
|
||||
foreach (var rom in obj.Rom)
|
||||
{
|
||||
WriteRomBase(rom, writer);
|
||||
}
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user