diff --git a/SabreTools.Library/DatFiles/DatHeader.cs b/SabreTools.Library/DatFiles/DatHeader.cs
index 771f818c..99d57f29 100644
--- a/SabreTools.Library/DatFiles/DatHeader.cs
+++ b/SabreTools.Library/DatFiles/DatHeader.cs
@@ -183,6 +183,7 @@ namespace SabreTools.Library.DatFiles
///
/// Debug build flag
///
+ /// Also in Logiqx
[JsonProperty("debug")]
public bool? Debug { get; set; } = false;
@@ -194,6 +195,16 @@ namespace SabreTools.Library.DatFiles
#endregion
+ #region Logiqx
+
+ ///
+ /// Build version
+ ///
+ [JsonProperty("build")]
+ public string Build { get; set; }
+
+ #endregion
+
#region Missfile Fields
///
diff --git a/SabreTools.Library/DatFiles/Json.cs b/SabreTools.Library/DatFiles/Json.cs
index 4da349b7..c0746eb6 100644
--- a/SabreTools.Library/DatFiles/Json.cs
+++ b/SabreTools.Library/DatFiles/Json.cs
@@ -227,6 +227,15 @@ namespace SabreTools.Library.DatFiles
#endregion
+ #region Logiqx
+
+ case "build":
+ content = jtr.ReadAsString();
+ Header.Build = (Header.Build == null ? content : Header.Build);
+ break;
+
+ #endregion
+
default:
break;
}
@@ -341,6 +350,24 @@ namespace SabreTools.Library.DatFiles
break;
case "sampleof":
machine.SampleOf = jtr.ReadAsString();
+ break;
+ case "isbios":
+ string isbios = jtr.ReadAsString();
+ if (string.Equals(isbios, "yes", StringComparison.OrdinalIgnoreCase))
+ machine.MachineType &= MachineType.Bios;
+
+ break;
+ case "isdevice":
+ string isdevice = jtr.ReadAsString();
+ if (string.Equals(isdevice, "yes", StringComparison.OrdinalIgnoreCase))
+ machine.MachineType &= MachineType.Device;
+
+ break;
+ case "ismechanical":
+ string ismechanical = jtr.ReadAsString();
+ if (string.Equals(ismechanical, "yes", StringComparison.OrdinalIgnoreCase))
+ machine.MachineType &= MachineType.Mechanical;
+
break;
case "items":
ReadItems(sr, jtr, filename, indexId, machine);
@@ -412,24 +439,6 @@ namespace SabreTools.Library.DatFiles
}
break;
- case "isbios":
- string isbios = jtr.ReadAsString();
- if (string.Equals(isbios, "yes", StringComparison.OrdinalIgnoreCase))
- machine.MachineType &= MachineType.Bios;
-
- break;
- case "isdevice":
- string isdevice = jtr.ReadAsString();
- if (string.Equals(isdevice, "yes", StringComparison.OrdinalIgnoreCase))
- machine.MachineType &= MachineType.Device;
-
- break;
- case "ismechanical":
- string ismechanical = jtr.ReadAsString();
- if (string.Equals(ismechanical, "yes", StringComparison.OrdinalIgnoreCase))
- machine.MachineType &= MachineType.Mechanical;
-
- break;
// Logiqx
case "board":
@@ -1023,6 +1032,16 @@ namespace SabreTools.Library.DatFiles
#endregion
+ #region Logiqx
+
+ if (!string.IsNullOrWhiteSpace(Header.Build))
+ {
+ jtw.WritePropertyName("build");
+ jtw.WriteValue(Header.Build);
+ }
+
+ #endregion
+
// End header
jtw.WriteEndObject();
@@ -1105,6 +1124,24 @@ namespace SabreTools.Library.DatFiles
jtw.WritePropertyName("sampleof");
jtw.WriteValue(datItem.Machine.SampleOf);
}
+ if (!Header.ExcludeFields.Contains(Field.MachineType))
+ {
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
+ {
+ jtw.WritePropertyName("isbios");
+ jtw.WriteValue("yes");
+ }
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Device))
+ {
+ jtw.WritePropertyName("isdevice");
+ jtw.WriteValue("yes");
+ }
+ if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
+ {
+ jtw.WritePropertyName("ismechanical");
+ jtw.WriteValue("yes");
+ }
+ }
// AttractMode
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Players, Header.ExcludeFields)))
@@ -1198,24 +1235,6 @@ namespace SabreTools.Library.DatFiles
jtw.WriteEndArray();
}
- if (!Header.ExcludeFields.Contains(Field.MachineType))
- {
- if (datItem.Machine.MachineType.HasFlag(MachineType.Bios))
- {
- jtw.WritePropertyName("isbios");
- jtw.WriteValue("yes");
- }
- if (datItem.Machine.MachineType.HasFlag(MachineType.Device))
- {
- jtw.WritePropertyName("isdevice");
- jtw.WriteValue("yes");
- }
- if (datItem.Machine.MachineType.HasFlag(MachineType.Mechanical))
- {
- jtw.WritePropertyName("ismechanical");
- jtw.WriteValue("yes");
- }
- }
// Logiqx
if (!string.IsNullOrWhiteSpace(datItem.GetField(Field.Board, Header.ExcludeFields)))
diff --git a/SabreTools.Library/DatFiles/Logiqx.cs b/SabreTools.Library/DatFiles/Logiqx.cs
index 2c9c6223..3129d07f 100644
--- a/SabreTools.Library/DatFiles/Logiqx.cs
+++ b/SabreTools.Library/DatFiles/Logiqx.cs
@@ -76,8 +76,8 @@ namespace SabreTools.Library.DatFiles
{
// The datafile tag can have some attributes
case "datafile":
- // string build = xtr.GetAttribute("build");
- // string debug = xtr.GetAttribute("debug"); // (yes|no) "no"
+ Header.Build = (Header.Build == null ? xtr.GetAttribute("build") : Header.Build);
+ Header.Debug = (Header.Debug == null ? xtr.GetAttribute("debug").AsYesNo() : Header.Debug);
xtr.Read();
break;
@@ -776,6 +776,21 @@ namespace SabreTools.Library.DatFiles
xtw.WriteStartElement("datafile");
+ if (Header.Build != null)
+ xtw.WriteAttributeString("build", Header.Build);
+ if (Header.Debug != null)
+ {
+ switch (Header.Debug)
+ {
+ case true:
+ xtw.WriteAttributeString("debug", "yes");
+ break;
+ case false:
+ xtw.WriteAttributeString("debug", "no");
+ break;
+ }
+ }
+
xtw.WriteStartElement("header");
xtw.WriteElementString("name", Header.Name);
xtw.WriteElementString("description", Header.Description);
diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs
index de7642d3..8d55e357 100644
--- a/SabreTools.Library/DatFiles/SeparatedValue.cs
+++ b/SabreTools.Library/DatFiles/SeparatedValue.cs
@@ -200,6 +200,14 @@ namespace SabreTools.Library.DatFiles
#endregion
+ #region Logiqx
+
+ case "DatFile.Build":
+ Header.Build = (Header.Build == null ? value : Header.Build);
+ break;
+
+ #endregion
+
#endregion // DatFile
#region Machine
@@ -246,6 +254,10 @@ namespace SabreTools.Library.DatFiles
machine.SampleOf = value;
break;
+ case "Machine.MachineType":
+ machine.MachineType = value.AsMachineType();
+ break;
+
#endregion
#region AttractMode
@@ -321,10 +333,6 @@ namespace SabreTools.Library.DatFiles
break;
- case "Machine.MachineType":
- machine.MachineType = value.AsMachineType();
- break;
-
#endregion
#region Logiqx
@@ -751,6 +759,13 @@ namespace SabreTools.Library.DatFiles
#endregion
+ #region Logiqx
+
+ case "build":
+ return "DatFile.Build";
+
+ #endregion
+
#endregion // DatFile
#region Machine
@@ -803,6 +818,14 @@ namespace SabreTools.Library.DatFiles
case "sampleof":
return "Machine.SampleOf";
+ case "gametype":
+ case "game type":
+ case "game-type":
+ case "machinetype":
+ case "machine type":
+ case "machine-type":
+ return "Machine.MachineType";
+
#endregion
#region AttractMode
@@ -861,14 +884,6 @@ namespace SabreTools.Library.DatFiles
case "infos":
return "Machine.Infos";
- case "gametype":
- case "game type":
- case "game-type":
- case "machinetype":
- case "machine type":
- case "machine-type":
- return "Machine.MachineType";
-
#endregion
#region Logiqx
diff --git a/SabreTools.Library/DatItems/DatItem.cs b/SabreTools.Library/DatItems/DatItem.cs
index 18556df7..f834a0f3 100644
--- a/SabreTools.Library/DatItems/DatItem.cs
+++ b/SabreTools.Library/DatItems/DatItem.cs
@@ -157,6 +157,7 @@ namespace SabreTools.Library.DatItems
Field.RomOf,
Field.CloneOf,
Field.SampleOf,
+ Field.MachineType,
// AttractMode
Field.Players,
@@ -173,7 +174,6 @@ namespace SabreTools.Library.DatItems
Field.Devices,
Field.SlotOptions,
Field.Infos,
- Field.MachineType,
// Logiqx
Field.Board,
diff --git a/SabreTools.Library/DatItems/Enums.cs b/SabreTools.Library/DatItems/Enums.cs
index 458fa71b..81d79edc 100644
--- a/SabreTools.Library/DatItems/Enums.cs
+++ b/SabreTools.Library/DatItems/Enums.cs
@@ -37,6 +37,7 @@ namespace SabreTools.Library.DatItems
RomOf,
CloneOf,
SampleOf,
+ MachineType,
// AttractMode Machine
Players,
@@ -53,7 +54,6 @@ namespace SabreTools.Library.DatItems
Devices,
SlotOptions,
Infos,
- MachineType,
// Logiqx Machine
Board,
diff --git a/SabreTools.Library/DatItems/Machine.cs b/SabreTools.Library/DatItems/Machine.cs
index 735d6b3f..eaf2cd76 100644
--- a/SabreTools.Library/DatItems/Machine.cs
+++ b/SabreTools.Library/DatItems/Machine.cs
@@ -25,6 +25,7 @@ namespace SabreTools.Library.DatItems
///
/// Additional notes
///
+ /// Known as "Extra" in AttractMode
[JsonProperty("comment")]
public string Comment { get; set; } = null;
@@ -76,6 +77,12 @@ namespace SabreTools.Library.DatItems
[JsonProperty("sampleof")]
public string SampleOf { get; set; } = null;
+ ///
+ /// Type of the machine
+ ///
+ [JsonProperty("type")]
+ public MachineType MachineType { get; set; } = MachineType.NULL;
+
#endregion
#region AttractMode Fields
@@ -129,6 +136,7 @@ namespace SabreTools.Library.DatItems
///
/// Emulator source file related to the machine
///
+ /// Also in Logiqx
[JsonProperty("sourcefile")]
public string SourceFile { get; set; } = null;
@@ -136,6 +144,7 @@ namespace SabreTools.Library.DatItems
/// Machine runnable status
///
/// yes = true, partial = null, no = false
+ /// Also in Logiqx
[JsonProperty("runnable")]
public bool? Runnable { get; set; } = null;
@@ -157,12 +166,6 @@ namespace SabreTools.Library.DatItems
[JsonProperty("infos")]
public List> Infos { get; set; } = null;
- ///
- /// Type of the machine
- ///
- [JsonProperty("type")]
- public MachineType MachineType { get; set; } = MachineType.NULL;
-
#endregion
#region Logiqx Fields
@@ -239,6 +242,9 @@ namespace SabreTools.Library.DatItems
case Field.SampleOf:
fieldValue = SampleOf;
break;
+ case Field.MachineType:
+ fieldValue = MachineType.ToString();
+ break;
// AttractMode
case Field.Players:
@@ -279,9 +285,6 @@ namespace SabreTools.Library.DatItems
case Field.Infos:
fieldValue = string.Join(";", (Infos ?? new List>()).Select(i => $"{i.Key}={i.Value}"));
break;
- case Field.MachineType:
- fieldValue = MachineType.ToString();
- break;
// Logiqx
case Field.Board:
@@ -645,6 +648,9 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.SampleOf))
SampleOf = null;
+ if (fields.Contains(Field.MachineType))
+ MachineType = MachineType.NULL;
+
#endregion
#region AttractMode
@@ -689,9 +695,6 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.Infos))
Infos = null;
- if (fields.Contains(Field.MachineType))
- MachineType = MachineType.NULL;
-
#endregion
#region Logiqx
@@ -759,6 +762,9 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.SampleOf))
SampleOf = machine.SampleOf;
+ if (fields.Contains(Field.MachineType))
+ MachineType = machine.MachineType;
+
#endregion
#region AttractMode
@@ -803,9 +809,6 @@ namespace SabreTools.Library.DatItems
if (fields.Contains(Field.Infos))
Infos = machine.Infos;
- if (fields.Contains(Field.MachineType))
- MachineType = machine.MachineType;
-
#endregion
#region Logiqx
diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs
index 9ae23ec3..bb8d7eaa 100644
--- a/SabreTools.Library/Filtering/Filter.cs
+++ b/SabreTools.Library/Filtering/Filter.cs
@@ -490,6 +490,13 @@ namespace SabreTools.Library.Filtering
SampleOf.PositiveSet.Add(value);
break;
+ case Field.MachineType:
+ if (negate)
+ MachineTypes.Negative |= value.AsMachineType();
+ else
+ MachineTypes.Positive |= value.AsMachineType();
+ break;
+
#endregion
#region AttractMode
@@ -575,13 +582,6 @@ namespace SabreTools.Library.Filtering
SlotOptions.PositiveSet.Add(value);
break;
- case Field.MachineType:
- if (negate)
- MachineTypes.Negative |= value.AsMachineType();
- else
- MachineTypes.Positive |= value.AsMachineType();
- break;
-
#endregion
#region Logiqx
diff --git a/SabreTools.Library/Tools/Converters.cs b/SabreTools.Library/Tools/Converters.cs
index 5cbdfb1a..3bd6bd29 100644
--- a/SabreTools.Library/Tools/Converters.cs
+++ b/SabreTools.Library/Tools/Converters.cs
@@ -176,6 +176,14 @@ namespace SabreTools.Library.Tools
case "sampleof":
return Field.SampleOf;
+ case "gametype":
+ case "game type":
+ case "game-type":
+ case "machinetype":
+ case "machine type":
+ case "machine-type":
+ return Field.MachineType;
+
#endregion
#region AttractMode
@@ -234,14 +242,6 @@ namespace SabreTools.Library.Tools
case "infos":
return Field.Infos;
- case "gametype":
- case "game type":
- case "game-type":
- case "machinetype":
- case "machine type":
- case "machine-type":
- return Field.MachineType;
-
#endregion
#region Logiqx