mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Create and use constructors in Skippers
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user