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) {