Create and use constructors in Skippers

This commit is contained in:
Matt Nadareski
2024-02-29 01:27:16 -05:00
parent 57b0362d31
commit 78ff313ddc
15 changed files with 117 additions and 371 deletions

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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,
];
}
}

View File

@@ -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,
];
}
}

View File

@@ -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";

View File

@@ -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";

View File

@@ -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,
];
}
}

View File

@@ -84,6 +84,18 @@ namespace SabreTools.Skippers
#endregion
/// <summary>
/// Constructor
/// </summary>
public Rule(string? startOffset, string? endOffset, HeaderSkipOperation operation, Test[]? tests, string? sourceFile)
{
StartOffset = startOffset;
EndOffset = endOffset;
Operation = operation;
Tests = tests;
SourceFile = sourceFile;
}
/// <summary>
/// Check if a Stream passes all tests in the Rule
/// </summary>

View File

@@ -80,6 +80,17 @@ namespace SabreTools.Skippers.Tests
#endregion
/// <summary>
/// Constructor
/// </summary>
public AndTest(string? offset, string? value, bool result, string? mask)
{
Offset = offset;
Value = value;
Result = result;
Mask = mask;
}
/// <inheritdoc/>
public override bool Passes(Stream input)
{

View File

@@ -64,6 +64,16 @@ namespace SabreTools.Skippers.Tests
#endregion
/// <summary>
/// Constructor
/// </summary>
public DataTest(string? offset, string? value, bool result)
{
Offset = offset;
Value = value;
Result = result;
}
/// <inheritdoc/>
public override bool Passes(Stream input)
{

View File

@@ -24,7 +24,7 @@ namespace SabreTools.Skippers.Tests
/// </summary>
/// <remarks>Either numeric or the literal "po2"</remarks>
[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
/// <summary>
/// Constructor
/// </summary>
public FileTest(bool result, string? size, HeaderSkipTestFileOperator opr)
{
Result = result;
Size = size;
Operator = opr;
}
/// <inheritdoc/>
public override bool Passes(Stream input)
{

View File

@@ -80,6 +80,17 @@ namespace SabreTools.Skippers.Tests
#endregion
/// <summary>
/// Constructor
/// </summary>
public OrTest(string? offset, string? value, bool result, string? mask)
{
Offset = offset;
Value = value;
Result = result;
Mask = mask;
}
/// <inheritdoc/>
public override bool Passes(Stream input)
{

View File

@@ -80,6 +80,17 @@ namespace SabreTools.Skippers.Tests
#endregion
/// <summary>
/// Constructor
/// </summary>
public XorTest(string? offset, string? value, bool result, string? mask)
{
Offset = offset;
Value = value;
Result = result;
Mask = mask;
}
/// <inheritdoc/>
public override bool Passes(Stream input)
{