diff --git a/SabreTools.Skippers/Detectors/Atari7800.cs b/SabreTools.Skippers/Detectors/Atari7800.cs
index 26e393d4..fcae87c5 100644
--- a/SabreTools.Skippers/Detectors/Atari7800.cs
+++ b/SabreTools.Skippers/Detectors/Atari7800.cs
@@ -11,42 +11,12 @@ namespace SabreTools.Skippers.Detectors
public Atari7800()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "1",
- Value = "415441524937383030",
- Result = true,
- };
-
- var rule2Test1 = new DataTest
- {
- Offset = "64",
- Value = "41435455414C20434152542044415441205354415254532048455245",
- Result = true,
- };
+ var rule1Test1 = new DataTest("1", "415441524937383030", true);
+ var rule2Test1 = new DataTest("64", "41435455414C20434152542044415441205354415254532048455245", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "80",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
-
- var rule2 = new Rule
- {
- StartOffset = "80",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule2Test1,
- ]
- };
+ var rule1 = new Rule("80", "EOF", HeaderSkipOperation.None, [rule1Test1], "a7800");
+ var rule2 = new Rule("80", "EOF", HeaderSkipOperation.None, [rule2Test1], "a7800");
// Create file
Name = "Atari 7800";
diff --git a/SabreTools.Skippers/Detectors/AtariLynx.cs b/SabreTools.Skippers/Detectors/AtariLynx.cs
index d516e007..e7d581bf 100644
--- a/SabreTools.Skippers/Detectors/AtariLynx.cs
+++ b/SabreTools.Skippers/Detectors/AtariLynx.cs
@@ -11,42 +11,12 @@ namespace SabreTools.Skippers.Detectors
public AtariLynx()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "4C594E58",
- Result = true,
- };
-
- var rule2Test1 = new DataTest
- {
- Offset = "6",
- Value = "425339",
- Result = true,
- };
+ var rule1Test1 = new DataTest("0", "4C594E58", true);
+ var rule2Test1 = new DataTest("6", "425339", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "40",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
-
- var rule2 = new Rule
- {
- StartOffset = "40",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule2Test1,
- ]
- };
+ var rule1 = new Rule("40", "EOF", HeaderSkipOperation.None, [rule1Test1], "lynx");
+ var rule2 = new Rule("40", "EOF", HeaderSkipOperation.None, [rule2Test1], "lynx");
// Create file
Name = "Atari Lynx";
diff --git a/SabreTools.Skippers/Detectors/CommodorePSID.cs b/SabreTools.Skippers/Detectors/CommodorePSID.cs
index 184744aa..94759713 100644
--- a/SabreTools.Skippers/Detectors/CommodorePSID.cs
+++ b/SabreTools.Skippers/Detectors/CommodorePSID.cs
@@ -11,96 +11,18 @@ namespace SabreTools.Skippers.Detectors
public CommodorePSID()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "5053494400010076",
- Result = true,
- };
-
- var rule2Test1 = new DataTest
- {
- Offset = "0",
- Value = "505349440003007c",
- Result = true,
- };
-
- var rule3Test1 = new DataTest
- {
- Offset = "0",
- Value = "505349440002007c",
- Result = true,
- };
-
- var rule4Test1 = new DataTest
- {
- Offset = "0",
- Value = "505349440001007c",
- Result = true,
- };
-
- var rule5Test1 = new DataTest
- {
- Offset = "0",
- Value = "525349440002007c",
- Result = true,
- };
+ var rule1Test1 = new DataTest("0", "5053494400010076", true);
+ var rule2Test1 = new DataTest("0", "505349440003007c", true);
+ var rule3Test1 = new DataTest("0", "505349440002007c", true);
+ var rule4Test1 = new DataTest("0", "505349440001007c", true);
+ var rule5Test1 = new DataTest("0", "525349440002007c", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "76",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
-
- var rule2 = new Rule
- {
- StartOffset = "76",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule2Test1,
- ]
- };
-
- var rule3 = new Rule
- {
- StartOffset = "7c",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule3Test1,
- ]
- };
-
- var rule4 = new Rule
- {
- StartOffset = "7c",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule4Test1,
- ]
- };
-
- var rule5 = new Rule
- {
- StartOffset = "7c",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule5Test1,
- ]
- };
+ var rule1 = new Rule("76", "EOF", HeaderSkipOperation.None, [rule1Test1], "psid");
+ var rule2 = new Rule("76", "EOF", HeaderSkipOperation.None, [rule2Test1], "psid");
+ var rule3 = new Rule("7c", "EOF", HeaderSkipOperation.None, [rule3Test1], "psid");
+ var rule4 = new Rule("7c", "EOF", HeaderSkipOperation.None, [rule4Test1], "psid");
+ var rule5 = new Rule("7c", "EOF", HeaderSkipOperation.None, [rule5Test1], "psid");
// Create file
Name = "psid";
diff --git a/SabreTools.Skippers/Detectors/NECPCEngine.cs b/SabreTools.Skippers/Detectors/NECPCEngine.cs
index 65f6e994..a07ef102 100644
--- a/SabreTools.Skippers/Detectors/NECPCEngine.cs
+++ b/SabreTools.Skippers/Detectors/NECPCEngine.cs
@@ -11,23 +11,10 @@ namespace SabreTools.Skippers.Detectors
public NECPCEngine()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "4000000000000000AABB02",
- Result = true,
- };
+ var rule1Test1 = new DataTest("0", "4000000000000000AABB02", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "200",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
+ var rule1 = new Rule("200", null, HeaderSkipOperation.None, [rule1Test1], "pce");
// Create file
Name = "NEC TurboGrafx-16/PC-Engine";
diff --git a/SabreTools.Skippers/Detectors/Nintendo64.cs b/SabreTools.Skippers/Detectors/Nintendo64.cs
index 7891502d..af6d90f1 100644
--- a/SabreTools.Skippers/Detectors/Nintendo64.cs
+++ b/SabreTools.Skippers/Detectors/Nintendo64.cs
@@ -11,60 +11,14 @@ namespace SabreTools.Skippers.Detectors
public Nintendo64()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "80371240",
- Result = true,
- };
-
- var rule2Test1 = new DataTest
- {
- Offset = "0",
- Value = "37804012",
- Result = true,
- };
-
- var rule3Test1 = new DataTest
- {
- Offset = "0",
- Value = "40123780",
- Result = true,
- };
+ var v64Test = new DataTest("0", "80371240", true);
+ var z64Test = new DataTest("0", "37804012", true);
+ var n64Test = new DataTest("0", "40123780", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "0",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
-
- var rule2 = new Rule
- {
- StartOffset = "0",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.Byteswap,
- Tests =
- [
- rule2Test1,
- ]
- };
-
- var rule3 = new Rule
- {
- StartOffset = "0",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.Wordswap,
- Tests =
- [
- rule3Test1,
- ]
- };
+ var v64Rule = new Rule("0", "EOF", HeaderSkipOperation.None, [v64Test], "n64");
+ var z64Rule = new Rule("0", "EOF", HeaderSkipOperation.Byteswap, [z64Test], "n64");
+ var n64Rule = new Rule("0", "EOF", HeaderSkipOperation.Wordswap, [n64Test], "n64");
// Create file
Name = "Nintendo 64 - ABCD";
@@ -73,9 +27,9 @@ namespace SabreTools.Skippers.Detectors
SourceFile = "n64";
Rules =
[
- rule1, // V64
- rule2, // Z64
- rule3, // N64
+ v64Rule,
+ z64Rule,
+ n64Rule,
];
}
}
diff --git a/SabreTools.Skippers/Detectors/NintendoEntertainmentSystem.cs b/SabreTools.Skippers/Detectors/NintendoEntertainmentSystem.cs
index bad3efa9..cd15018c 100644
--- a/SabreTools.Skippers/Detectors/NintendoEntertainmentSystem.cs
+++ b/SabreTools.Skippers/Detectors/NintendoEntertainmentSystem.cs
@@ -11,24 +11,10 @@ namespace SabreTools.Skippers.Detectors
public NintendoEntertainmentSystem()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "4E45531A",
- Result = true,
- };
+ var inesTest = new DataTest("0", "4E45531A", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "10",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
+ var inesRule = new Rule("10", "EOF", HeaderSkipOperation.None, [inesTest], "nes");
// Create file
Name = "Nintendo Famicon/NES";
@@ -37,7 +23,7 @@ namespace SabreTools.Skippers.Detectors
SourceFile = "nes";
Rules =
[
- rule1,
+ inesRule,
];
}
}
diff --git a/SabreTools.Skippers/Detectors/NintendoFamicomDiskSystem.cs b/SabreTools.Skippers/Detectors/NintendoFamicomDiskSystem.cs
index d236c009..6489d83d 100644
--- a/SabreTools.Skippers/Detectors/NintendoFamicomDiskSystem.cs
+++ b/SabreTools.Skippers/Detectors/NintendoFamicomDiskSystem.cs
@@ -11,70 +11,16 @@ namespace SabreTools.Skippers.Detectors
public NintendoFamicomDiskSystem()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "4644531A010000000000000000000000",
- };
-
- var rule2Test1 = new DataTest
- {
- Offset = "0",
- Value = "4644531A020000000000000000000000",
- };
-
- var rule3Test1 = new DataTest
- {
- Offset = "0",
- Value = "4644531A030000000000000000000000",
- };
-
- var rule4Test1 = new DataTest
- {
- Offset = "0",
- Value = "4644531A040000000000000000000000",
- };
+ var rule1Test1 = new DataTest("0", "4644531A010000000000000000000000", true);
+ var rule2Test1 = new DataTest("0", "4644531A020000000000000000000000", true);
+ var rule3Test1 = new DataTest("0", "4644531A030000000000000000000000", true);
+ var rule4Test1 = new DataTest("0", "4644531A040000000000000000000000", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "10",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
-
- var rule2 = new Rule
- {
- StartOffset = "10",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule2Test1,
- ]
- };
-
- var rule3 = new Rule
- {
- StartOffset = "10",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule3Test1,
- ]
- };
-
- var rule4 = new Rule
- {
- StartOffset = "10",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule4Test1,
- ]
- };
+ var rule1 = new Rule("10", null, HeaderSkipOperation.None, [rule1Test1], "fds");
+ var rule2 = new Rule("10", null, HeaderSkipOperation.None, [rule2Test1], "fds");
+ var rule3 = new Rule("10", null, HeaderSkipOperation.None, [rule3Test1], "fds");
+ var rule4 = new Rule("10", null, HeaderSkipOperation.None, [rule4Test1], "fds");
// Create file
Name = "fds";
diff --git a/SabreTools.Skippers/Detectors/SuperFamicomSPC.cs b/SabreTools.Skippers/Detectors/SuperFamicomSPC.cs
index 46757e82..a33a438c 100644
--- a/SabreTools.Skippers/Detectors/SuperFamicomSPC.cs
+++ b/SabreTools.Skippers/Detectors/SuperFamicomSPC.cs
@@ -11,24 +11,10 @@ namespace SabreTools.Skippers.Detectors
public SuperFamicomSPC()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "0",
- Value = "534E45532D535043",
- Result = true,
- };
+ var rule1Test1 = new DataTest("0", "534E45532D535043", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "00100",
- EndOffset = "EOF",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
+ var rule1 = new Rule("00100", "EOF", HeaderSkipOperation.None, [rule1Test1], "spc");
// Create file
Name = "Nintendo Super Famicon SPC";
diff --git a/SabreTools.Skippers/Detectors/SuperNintendoEntertainmentSystem.cs b/SabreTools.Skippers/Detectors/SuperNintendoEntertainmentSystem.cs
index be9a3cf0..fa9d3871 100644
--- a/SabreTools.Skippers/Detectors/SuperNintendoEntertainmentSystem.cs
+++ b/SabreTools.Skippers/Detectors/SuperNintendoEntertainmentSystem.cs
@@ -11,54 +11,14 @@ namespace SabreTools.Skippers.Detectors
public SuperNintendoEntertainmentSystem()
{
// Create tests
- var rule1Test1 = new DataTest
- {
- Offset = "16",
- Value = "0000000000000000",
- };
-
- var rule2Test1 = new DataTest
- {
- Offset = "16",
- Value = "AABB040000000000",
- };
-
- var rule3Test1 = new DataTest
- {
- Offset = "16",
- Value = "535550455255464F",
- };
+ var figTest = new DataTest("16", "0000000000000000", true);
+ var smcTest = new DataTest("16", "AABB040000000000", true);
+ var ufoTest = new DataTest("16", "535550455255464F", true);
// Create rules
- var rule1 = new Rule
- {
- StartOffset = "200",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule1Test1,
- ]
- };
-
- var rule2 = new Rule
- {
- StartOffset = "200",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule2Test1,
- ]
- };
-
- var rule3 = new Rule
- {
- StartOffset = "200",
- Operation = HeaderSkipOperation.None,
- Tests =
- [
- rule3Test1,
- ]
- };
+ var figRule = new Rule("200", null, HeaderSkipOperation.None, [figTest], "snes");
+ var smcRule = new Rule("200", null, HeaderSkipOperation.None, [smcTest], "snes");
+ var ufoRule = new Rule("200", null, HeaderSkipOperation.None, [ufoTest], "snes");
// Create file
Name = "Nintendo Super Famicom/SNES";
@@ -67,9 +27,9 @@ namespace SabreTools.Skippers.Detectors
SourceFile = "snes";
Rules =
[
- rule1, // FIG
- rule2, // SMC
- rule3, // UFO
+ figRule,
+ smcRule,
+ ufoRule,
];
}
}
diff --git a/SabreTools.Skippers/Rule.cs b/SabreTools.Skippers/Rule.cs
index 4f4f1bb7..f8e3caae 100644
--- a/SabreTools.Skippers/Rule.cs
+++ b/SabreTools.Skippers/Rule.cs
@@ -84,6 +84,18 @@ namespace SabreTools.Skippers
#endregion
+ ///
+ /// Constructor
+ ///
+ public Rule(string? startOffset, string? endOffset, HeaderSkipOperation operation, Test[]? tests, string? sourceFile)
+ {
+ StartOffset = startOffset;
+ EndOffset = endOffset;
+ Operation = operation;
+ Tests = tests;
+ SourceFile = sourceFile;
+ }
+
///
/// Check if a Stream passes all tests in the Rule
///
diff --git a/SabreTools.Skippers/Tests/AndTest.cs b/SabreTools.Skippers/Tests/AndTest.cs
index 82f63e61..575cd98f 100644
--- a/SabreTools.Skippers/Tests/AndTest.cs
+++ b/SabreTools.Skippers/Tests/AndTest.cs
@@ -80,6 +80,17 @@ namespace SabreTools.Skippers.Tests
#endregion
+ ///
+ /// Constructor
+ ///
+ public AndTest(string? offset, string? value, bool result, string? mask)
+ {
+ Offset = offset;
+ Value = value;
+ Result = result;
+ Mask = mask;
+ }
+
///
public override bool Passes(Stream input)
{
diff --git a/SabreTools.Skippers/Tests/DataTest.cs b/SabreTools.Skippers/Tests/DataTest.cs
index 2187dffd..513b7cfe 100644
--- a/SabreTools.Skippers/Tests/DataTest.cs
+++ b/SabreTools.Skippers/Tests/DataTest.cs
@@ -64,6 +64,16 @@ namespace SabreTools.Skippers.Tests
#endregion
+ ///
+ /// Constructor
+ ///
+ public DataTest(string? offset, string? value, bool result)
+ {
+ Offset = offset;
+ Value = value;
+ Result = result;
+ }
+
///
public override bool Passes(Stream input)
{
diff --git a/SabreTools.Skippers/Tests/FileTest.cs b/SabreTools.Skippers/Tests/FileTest.cs
index 231c3f2d..8c1436e6 100644
--- a/SabreTools.Skippers/Tests/FileTest.cs
+++ b/SabreTools.Skippers/Tests/FileTest.cs
@@ -24,7 +24,7 @@ namespace SabreTools.Skippers.Tests
///
/// Either numeric or the literal "po2"
[XmlAttribute("size")]
- public string Size
+ public string? Size
{
get => _size == null ? "po2" : _size.Value.ToString();
set
@@ -54,6 +54,16 @@ namespace SabreTools.Skippers.Tests
#endregion
+ ///
+ /// Constructor
+ ///
+ public FileTest(bool result, string? size, HeaderSkipTestFileOperator opr)
+ {
+ Result = result;
+ Size = size;
+ Operator = opr;
+ }
+
///
public override bool Passes(Stream input)
{
diff --git a/SabreTools.Skippers/Tests/OrTest.cs b/SabreTools.Skippers/Tests/OrTest.cs
index 22d6818d..f077168c 100644
--- a/SabreTools.Skippers/Tests/OrTest.cs
+++ b/SabreTools.Skippers/Tests/OrTest.cs
@@ -80,6 +80,17 @@ namespace SabreTools.Skippers.Tests
#endregion
+ ///
+ /// Constructor
+ ///
+ public OrTest(string? offset, string? value, bool result, string? mask)
+ {
+ Offset = offset;
+ Value = value;
+ Result = result;
+ Mask = mask;
+ }
+
///
public override bool Passes(Stream input)
{
diff --git a/SabreTools.Skippers/Tests/XorTest.cs b/SabreTools.Skippers/Tests/XorTest.cs
index b8852576..1c3d5caa 100644
--- a/SabreTools.Skippers/Tests/XorTest.cs
+++ b/SabreTools.Skippers/Tests/XorTest.cs
@@ -80,6 +80,17 @@ namespace SabreTools.Skippers.Tests
#endregion
+ ///
+ /// Constructor
+ ///
+ public XorTest(string? offset, string? value, bool result, string? mask)
+ {
+ Offset = offset;
+ Value = value;
+ Result = result;
+ Mask = mask;
+ }
+
///
public override bool Passes(Stream input)
{