mirror of
https://github.com/SabreTools/SabreTools.Models.git
synced 2026-02-06 13:47:34 +00:00
Compare commits
285 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0130a9caee | ||
|
|
da204f129f | ||
|
|
945a62d1f2 | ||
|
|
8ab5088607 | ||
|
|
9e9fcac654 | ||
|
|
76dac1025c | ||
|
|
0ec1cac7cf | ||
|
|
6a0b97fdcd | ||
|
|
66f7adc49a | ||
|
|
4bc685ba23 | ||
|
|
89ef827251 | ||
|
|
beb42b7e35 | ||
|
|
0502808962 | ||
|
|
e3411d3984 | ||
|
|
9d13cb01e3 | ||
|
|
649ea98a52 | ||
|
|
b90d7c5e9a | ||
|
|
9def156302 | ||
|
|
e1db4fc17b | ||
|
|
ae4ad5c272 | ||
|
|
5bda523aec | ||
|
|
eda099d44e | ||
|
|
b5ac9304a4 | ||
|
|
b40f84dd4b | ||
|
|
4a276fb65e | ||
|
|
973a94b340 | ||
|
|
c6062f71eb | ||
|
|
fd7746fae3 | ||
|
|
d3c6bdf23f | ||
|
|
605a3bf30d | ||
|
|
710ddc912d | ||
|
|
2f94464b7d | ||
|
|
b3d9bd3d6b | ||
|
|
c51c16ed2d | ||
|
|
978b6904db | ||
|
|
d62bd2f60c | ||
|
|
26f7f4d7da | ||
|
|
50a6f9ba89 | ||
|
|
f07c11fb47 | ||
|
|
dc47f64ee6 | ||
|
|
69006247a9 | ||
|
|
9c43b80502 | ||
|
|
cbb7563724 | ||
|
|
c7530884b3 | ||
|
|
e59c9205d4 | ||
|
|
f5859638c2 | ||
|
|
84d3740e73 | ||
|
|
517324ab58 | ||
|
|
a02c037995 | ||
|
|
a1890e1fe6 | ||
|
|
32c6633788 | ||
|
|
81b53c9785 | ||
|
|
54c05f2746 | ||
|
|
4a4d7ceddf | ||
|
|
0f029c5979 | ||
|
|
bb4fee91d9 | ||
|
|
ed56e2543d | ||
|
|
d675673e50 | ||
|
|
ebee967c7f | ||
|
|
f5da54eaac | ||
|
|
2350c1af27 | ||
|
|
454d507b41 | ||
|
|
10de4acbb9 | ||
|
|
8ec91d8d04 | ||
|
|
1d62d69a53 | ||
|
|
5b5fed8932 | ||
|
|
32123d4b80 | ||
|
|
f5717c3929 | ||
|
|
e8db261d73 | ||
|
|
9557f43dab | ||
|
|
51b9c1a016 | ||
|
|
bb3cd54865 | ||
|
|
0c6060a901 | ||
|
|
c18770f627 | ||
|
|
c2a5d6770c | ||
|
|
4ef79ccdca | ||
|
|
cf5135f330 | ||
|
|
6d989209db | ||
|
|
cc48593646 | ||
|
|
415d571b65 | ||
|
|
4a6e244b38 | ||
|
|
771a39517f | ||
|
|
b072a3809c | ||
|
|
341585206a | ||
|
|
2dc2ab5dd1 | ||
|
|
144a3ce52b | ||
|
|
85199789f7 | ||
|
|
fb39216c82 | ||
|
|
1a2de39868 | ||
|
|
f18b6c8850 | ||
|
|
8f1e49e464 | ||
|
|
6547242f93 | ||
|
|
edf00f3ab2 | ||
|
|
bce4736037 | ||
|
|
81f28974c0 | ||
|
|
30ebe84af4 | ||
|
|
b07fbdedd6 | ||
|
|
cd8fff4a86 | ||
|
|
3d3275e3cb | ||
|
|
4c76ce1230 | ||
|
|
0c4e3b4bf2 | ||
|
|
e8f4386199 | ||
|
|
ab66ccf3c5 | ||
|
|
cc60d54a33 | ||
|
|
e805f4cb9a | ||
|
|
328c893a38 | ||
|
|
ab2a12c996 | ||
|
|
362b123661 | ||
|
|
4a8a4746a2 | ||
|
|
3f368a3be8 | ||
|
|
2749c2f5bd | ||
|
|
41ce962700 | ||
|
|
85b7103bd3 | ||
|
|
4c61a191e8 | ||
|
|
0f70598969 | ||
|
|
d6b057d808 | ||
|
|
3d8036e7b5 | ||
|
|
bb35946866 | ||
|
|
78f9f1b36f | ||
|
|
9d1b1ca36d | ||
|
|
6e1f8bf55e | ||
|
|
a19afc240c | ||
|
|
148e97ef64 | ||
|
|
676b446025 | ||
|
|
aeff75d8d3 | ||
|
|
e20e515f56 | ||
|
|
bf02266f0f | ||
|
|
b521e503c2 | ||
|
|
48e79d26ed | ||
|
|
989ef41c6d | ||
|
|
6b0c4c3024 | ||
|
|
4b54d0f4dc | ||
|
|
2bc1cfc5d0 | ||
|
|
362abfdc64 | ||
|
|
a06ff8f8b3 | ||
|
|
7269e91913 | ||
|
|
c118271565 | ||
|
|
71ccbc6ab1 | ||
|
|
ed5c1a7173 | ||
|
|
0451af3eb4 | ||
|
|
7967eb29eb | ||
|
|
6bbe904cc3 | ||
|
|
dce9d98885 | ||
|
|
f862e018fb | ||
|
|
b4a5154da8 | ||
|
|
077aa3c57e | ||
|
|
ea8630ba8c | ||
|
|
385491c67b | ||
|
|
f57461e0c3 | ||
|
|
18f49ac43f | ||
|
|
28fd81adab | ||
|
|
ecca68822d | ||
|
|
58c2dcbe4f | ||
|
|
f9b8717abb | ||
|
|
6a356a5874 | ||
|
|
88c6a0302f | ||
|
|
5282db965f | ||
|
|
33217a7efe | ||
|
|
c8583589d6 | ||
|
|
6ed2b406d7 | ||
|
|
4b08e0f5dd | ||
|
|
e8259fed12 | ||
|
|
d06df28f72 | ||
|
|
f73ff87922 | ||
|
|
dd6b79a21b | ||
|
|
d3daa2c4aa | ||
|
|
1620d00edf | ||
|
|
5565fa2fc3 | ||
|
|
e088e203ea | ||
|
|
acc8d95930 | ||
|
|
1a76c59827 | ||
|
|
8725ec0337 | ||
|
|
8991cc460d | ||
|
|
98ce8b65ec | ||
|
|
ca58343c30 | ||
|
|
2f637e0012 | ||
|
|
80172942fd | ||
|
|
aa0960b42f | ||
|
|
2554f64277 | ||
|
|
4c5c960915 | ||
|
|
1cb49163dd | ||
|
|
d144dd47a1 | ||
|
|
c4247c7ccb | ||
|
|
1e77437167 | ||
|
|
3d79e07d76 | ||
|
|
9d50d577ab | ||
|
|
494ca175fb | ||
|
|
73b3d4a7a8 | ||
|
|
bd40158423 | ||
|
|
149a45d871 | ||
|
|
e18d8d7543 | ||
|
|
38f0d4aef5 | ||
|
|
3959993255 | ||
|
|
00df5bdd6e | ||
|
|
00c087d8e0 | ||
|
|
6bc948784a | ||
|
|
c4f14854c2 | ||
|
|
adaac68898 | ||
|
|
a9bc4a2bfe | ||
|
|
262b91de65 | ||
|
|
62bd6a4bde | ||
|
|
7f14f0c5b0 | ||
|
|
33d63fddae | ||
|
|
209be57bf4 | ||
|
|
a1581e9d9b | ||
|
|
521664d5a8 | ||
|
|
73a8d91a83 | ||
|
|
438e87f833 | ||
|
|
2cdedbb456 | ||
|
|
b57a545598 | ||
|
|
8dc6eb2eee | ||
|
|
b58436d71a | ||
|
|
925c20021f | ||
|
|
9bebf95599 | ||
|
|
089e13ca03 | ||
|
|
de07b3b0dd | ||
|
|
22cb5360e6 | ||
|
|
a422ec7e6d | ||
|
|
f60afd6368 | ||
|
|
b8f67a8ab0 | ||
|
|
d844a8b582 | ||
|
|
8583baa862 | ||
|
|
8f3be17850 | ||
|
|
5856967794 | ||
|
|
8f78c73c6f | ||
|
|
af4ff3d383 | ||
|
|
3e638a5c57 | ||
|
|
638d0226c1 | ||
|
|
07c6d5b43a | ||
|
|
108e63a099 | ||
|
|
c636d3252b | ||
|
|
b19dbf2254 | ||
|
|
111b84170c | ||
|
|
2d7df0d4fb | ||
|
|
aba02663e5 | ||
|
|
594fec923a | ||
|
|
b5cf4e870d | ||
|
|
e6976796c2 | ||
|
|
295d8c7612 | ||
|
|
4dd184583c | ||
|
|
081c9c9245 | ||
|
|
b974380ccf | ||
|
|
41ed2cbc9a | ||
|
|
2cfcb49e35 | ||
|
|
b3f3f12b3e | ||
|
|
b41700ff92 | ||
|
|
e8a357546b | ||
|
|
68f0201c11 | ||
|
|
25b6493249 | ||
|
|
a551363c0b | ||
|
|
2fd92aea8f | ||
|
|
a61b3d0ed9 | ||
|
|
a40a6871df | ||
|
|
5792ec64c0 | ||
|
|
3b13c7cc96 | ||
|
|
894d7b62e2 | ||
|
|
38e37b1a63 | ||
|
|
1f340bd244 | ||
|
|
e582ce8726 | ||
|
|
dad71add36 | ||
|
|
cb2a28016e | ||
|
|
46a814ac73 | ||
|
|
8fabe9c02d | ||
|
|
21e22a1476 | ||
|
|
016057a837 | ||
|
|
69ca889ac7 | ||
|
|
cd67a7282b | ||
|
|
948edbad58 | ||
|
|
d445f02ba6 | ||
|
|
835fce7876 | ||
|
|
97513840e0 | ||
|
|
6112dcb391 | ||
|
|
c000e581c8 | ||
|
|
465cef4224 | ||
|
|
87cadbfd2b | ||
|
|
648ee2eaa5 | ||
|
|
daa814728d | ||
|
|
68aac36623 | ||
|
|
0c95cfcde4 | ||
|
|
6d6361c153 | ||
|
|
e4be402052 | ||
|
|
182c9bc756 | ||
|
|
cc62b3ffae | ||
|
|
7d34f486cd | ||
|
|
9c68cfc0c1 |
40
.github/workflows/build_and_test.yml
vendored
Normal file
40
.github/workflows/build_and_test.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: Build and Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: |
|
||||
6.0.x
|
||||
8.0.x
|
||||
9.0.x
|
||||
|
||||
- name: Run tests
|
||||
run: dotnet test
|
||||
|
||||
- name: Run publish script
|
||||
run: ./publish-nix.sh
|
||||
|
||||
- name: Upload to rolling
|
||||
uses: ncipollo/release-action@v1.14.0
|
||||
with:
|
||||
allowUpdates: True
|
||||
artifacts: "*.nupkg,*.snupkg"
|
||||
body: 'Last built commit: ${{ github.sha }}'
|
||||
name: 'Rolling Release'
|
||||
prerelease: True
|
||||
replacesArtifacts: True
|
||||
tag: "rolling"
|
||||
updateOnlyUnreleased: True
|
||||
23
.github/workflows/check_pr.yml
vendored
Normal file
23
.github/workflows/check_pr.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Build PR
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: |
|
||||
6.0.x
|
||||
8.0.x
|
||||
9.0.x
|
||||
|
||||
- name: Build
|
||||
run: dotnet build
|
||||
|
||||
- name: Run tests
|
||||
run: dotnet test
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.ArchiveDotOrg
|
||||
{
|
||||
[XmlRoot("files")]
|
||||
public class Files
|
||||
{
|
||||
[XmlElement("file")]
|
||||
#if NET48
|
||||
public File[] File { get; set; }
|
||||
#else
|
||||
public File?[]? File { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,150 +0,0 @@
|
||||
namespace SabreTools.Models.AttractMode
|
||||
{
|
||||
public class Row
|
||||
{
|
||||
/// <remarks>Also called Romname</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Title { get; set; }
|
||||
#else
|
||||
public string? Title { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Emulator { get; set; }
|
||||
#else
|
||||
public string? Emulator { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string CloneOf { get; set; }
|
||||
#else
|
||||
public string? CloneOf { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Year { get; set; }
|
||||
#else
|
||||
public string? Year { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Manufacturer { get; set; }
|
||||
#else
|
||||
public string? Manufacturer { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Category { get; set; }
|
||||
#else
|
||||
public string? Category { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Players { get; set; }
|
||||
#else
|
||||
public string? Players { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Rotation { get; set; }
|
||||
#else
|
||||
public string? Rotation { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Control { get; set; }
|
||||
#else
|
||||
public string? Control { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Status { get; set; }
|
||||
#else
|
||||
public string? Status { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string DisplayCount { get; set; }
|
||||
#else
|
||||
public string? DisplayCount { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string DisplayType { get; set; }
|
||||
#else
|
||||
public string? DisplayType { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string AltRomname { get; set; }
|
||||
#else
|
||||
public string? AltRomname { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string AltTitle { get; set; }
|
||||
#else
|
||||
public string? AltTitle { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Extra { get; set; }
|
||||
#else
|
||||
public string? Extra { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Buttons { get; set; }
|
||||
#else
|
||||
public string? Buttons { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Favorite { get; set; }
|
||||
#else
|
||||
public string? Favorite { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Tags { get; set; }
|
||||
#else
|
||||
public string? Tags { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string PlayedCount { get; set; }
|
||||
#else
|
||||
public string? PlayedCount { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string PlayedTime { get; set; }
|
||||
#else
|
||||
public string? PlayedTime { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string FileIsAvailable { get; set; }
|
||||
#else
|
||||
public string? FileIsAvailable { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
namespace SabreTools.Models.BSP
|
||||
{
|
||||
public static class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Number of lumps in a BSP
|
||||
/// </summary>
|
||||
public const int HL_BSP_LUMP_COUNT = 15;
|
||||
|
||||
/// <summary>
|
||||
/// Index for the entities lump
|
||||
/// </summary>
|
||||
public const int HL_BSP_LUMP_ENTITIES = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Index for the texture data lump
|
||||
/// </summary>
|
||||
public const int HL_BSP_LUMP_TEXTUREDATA = 2;
|
||||
|
||||
/// <summary>
|
||||
/// Number of valid mipmap levels
|
||||
/// </summary>
|
||||
public const int HL_BSP_MIPMAP_COUNT = 4;
|
||||
}
|
||||
}
|
||||
45
BSP/File.cs
45
BSP/File.cs
@@ -1,45 +0,0 @@
|
||||
namespace SabreTools.Models.BSP
|
||||
{
|
||||
/// <summary>
|
||||
/// Half-Life Level
|
||||
/// </summary>
|
||||
/// <see href="https://github.com/RavuAlHemio/hllib/blob/master/HLLib/BSPFile.h"/>
|
||||
public sealed class File
|
||||
{
|
||||
/// <summary>
|
||||
/// Header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Header Header { get; set; }
|
||||
#else
|
||||
public Header? Header { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Lumps
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Lump[] Lumps { get; set; }
|
||||
#else
|
||||
public Lump?[]? Lumps { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Texture header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public TextureHeader TextureHeader { get; set; }
|
||||
#else
|
||||
public TextureHeader? TextureHeader { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Textures
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Texture[] Textures { get; set; }
|
||||
#else
|
||||
public Texture?[]? Textures { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
namespace SabreTools.Models.BSP
|
||||
{
|
||||
/// <see href="https://github.com/RavuAlHemio/hllib/blob/master/HLLib/BSPFile.h"/>
|
||||
public sealed class Header
|
||||
{
|
||||
/// <summary>
|
||||
/// Version
|
||||
/// </summary>
|
||||
public uint Version { get; set; }
|
||||
}
|
||||
}
|
||||
16
BSP/Lump.cs
16
BSP/Lump.cs
@@ -1,16 +0,0 @@
|
||||
namespace SabreTools.Models.BSP
|
||||
{
|
||||
/// <see href="https://github.com/RavuAlHemio/hllib/blob/master/HLLib/BSPFile.h"/>
|
||||
public sealed class Lump
|
||||
{
|
||||
/// <summary>
|
||||
/// Offset
|
||||
/// </summary>
|
||||
public uint Offset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Length
|
||||
/// </summary>
|
||||
public uint Length { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
namespace SabreTools.Models.BSP
|
||||
{
|
||||
/// <see href="https://github.com/RavuAlHemio/hllib/blob/master/HLLib/BSPFile.h"/>
|
||||
public sealed class Texture
|
||||
{
|
||||
/// <summary>
|
||||
/// Name
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Width
|
||||
/// </summary>
|
||||
public uint Width { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Height
|
||||
/// </summary>
|
||||
public uint Height { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offsets
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public uint[] Offsets { get; set; }
|
||||
#else
|
||||
public uint[]? Offsets { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Texture data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] TextureData { get; set; }
|
||||
#else
|
||||
public byte[]? TextureData { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Palette size
|
||||
/// </summary>
|
||||
public uint PaletteSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Palette data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] PaletteData { get; set; }
|
||||
#else
|
||||
public byte[]? PaletteData { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
42
CHD/Enums.cs
42
CHD/Enums.cs
@@ -1,42 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Models.CHD
|
||||
{
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
public enum CompressionType : uint
|
||||
{
|
||||
#region V1
|
||||
|
||||
CHDCOMPRESSION_NONE = 0,
|
||||
CHDCOMPRESSION_ZLIB = 1,
|
||||
|
||||
#endregion
|
||||
|
||||
#region V3
|
||||
|
||||
CHDCOMPRESSION_ZLIB_PLUS = 2,
|
||||
|
||||
#endregion
|
||||
|
||||
#region V4
|
||||
|
||||
CHDCOMPRESSION_AV = 3,
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
|
||||
[Flags]
|
||||
public enum Flags : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Set if this drive has a parent
|
||||
/// </summary>
|
||||
DriveHasParent = 0x00000001,
|
||||
|
||||
/// <summary>
|
||||
/// Set if this drive allows writes
|
||||
/// </summary>
|
||||
DriveAllowsWrites = 0x00000002,
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SabreTools.Models.Charts
|
||||
{
|
||||
/// <see href="https://github.com/TheNathannator/GuitarGame_ChartFormats/blob/main/doc/FileFormats/Other/Frets%20on%20Fire%20X/Careers.md"/>
|
||||
/// <remarks>[titles]</remarks>
|
||||
internal class TitlesIni
|
||||
{
|
||||
/// <summary>
|
||||
/// A space-separated list of .ini sections to include in the career.
|
||||
/// </summary>
|
||||
/// <remarks>sections</remarks>
|
||||
#if NET48
|
||||
public string[] SectionList { get; set; }
|
||||
#else
|
||||
public string[]? SectionList { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// `name` - Display name of the tier.
|
||||
/// `unlock_id` - Name used for associating a song with this tier, and for checking unlock requirements.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Dictionary<string, (string Name, string UnlockId)> Sections { get; set; }
|
||||
#else
|
||||
public Dictionary<string, (string? Name, string? UnlockId)>? Sections { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>archive</remarks>
|
||||
public class Archive
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>biosset</remarks>
|
||||
public class BiosSet
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>description</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Description { get; set; }
|
||||
#else
|
||||
public string? Description { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>default</remarks>
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>chip</remarks>
|
||||
public class Chip
|
||||
{
|
||||
/// <remarks>type, (cpu|audio)</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Type { get; set; }
|
||||
#else
|
||||
public string? Type { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>flags</remarks>
|
||||
#if NET48
|
||||
public string Flags { get; set; }
|
||||
#else
|
||||
public string? Flags { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>clock, Numeric?</remarks>
|
||||
#if NET48
|
||||
public string Clock { get; set; }
|
||||
#else
|
||||
public string? Clock { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>dipswitch</remarks>
|
||||
public class DipSwitch
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>entry</remarks>
|
||||
#if NET48
|
||||
public string[] Entry { get; set; }
|
||||
#else
|
||||
public string[]? Entry { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>default, (yes|no) "no"</remarks>
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>disk</remarks>
|
||||
public class Disk
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>md5</remarks>
|
||||
#if NET48
|
||||
public string MD5 { get; set; }
|
||||
#else
|
||||
public string? MD5 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>sha1</remarks>
|
||||
#if NET48
|
||||
public string SHA1 { get; set; }
|
||||
#else
|
||||
public string? SHA1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>merge</remarks>
|
||||
#if NET48
|
||||
public string Merge { get; set; }
|
||||
#else
|
||||
public string? Merge { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>status</remarks>
|
||||
#if NET48
|
||||
public string Status { get; set; }
|
||||
#else
|
||||
public string? Status { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>flags</remarks>
|
||||
#if NET48
|
||||
public string Flags { get; set; }
|
||||
#else
|
||||
public string? Flags { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>media</remarks>
|
||||
public class Media
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>md5</remarks>
|
||||
#if NET48
|
||||
public string MD5 { get; set; }
|
||||
#else
|
||||
public string? MD5 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>sha1</remarks>
|
||||
#if NET48
|
||||
public string SHA1 { get; set; }
|
||||
#else
|
||||
public string? SHA1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>sha256</remarks>
|
||||
#if NET48
|
||||
public string SHA256 { get; set; }
|
||||
#else
|
||||
public string? SHA256 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>spamsum</remarks>
|
||||
#if NET48
|
||||
public string SpamSum { get; set; }
|
||||
#else
|
||||
public string? SpamSum { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
public class MetadataFile
|
||||
{
|
||||
/// <remarks>clrmamepro</remarks>
|
||||
#if NET48
|
||||
public ClrMamePro ClrMamePro { get; set; }
|
||||
#else
|
||||
public ClrMamePro? ClrMamePro { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>game, machine, resource, set</remarks>
|
||||
#if NET48
|
||||
public GameBase[] Game { get; set; }
|
||||
#else
|
||||
public GameBase?[]? Game { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>release</remarks>
|
||||
public class Release
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>region</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Region { get; set; }
|
||||
#else
|
||||
public string? Region { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>language</remarks>
|
||||
#if NET48
|
||||
public string Language { get; set; }
|
||||
#else
|
||||
public string? Language { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>date</remarks>
|
||||
#if NET48
|
||||
public string Date { get; set; }
|
||||
#else
|
||||
public string? Date { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>default</remarks>
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>sample</remarks>
|
||||
public class Sample
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
namespace SabreTools.Models.ClrMamePro
|
||||
{
|
||||
/// <remarks>sound</remarks>
|
||||
public class Sound
|
||||
{
|
||||
/// <remarks>channels, Numeric?</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Channels { get; set; }
|
||||
#else
|
||||
public string? Channels { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZ
|
||||
{
|
||||
public static class Constants
|
||||
{
|
||||
public const int GETLEN = 2048;
|
||||
|
||||
public const int LZ_MAGIC_LEN = 8;
|
||||
|
||||
public const int LZ_HEADER_LEN = 14;
|
||||
|
||||
public static readonly byte[] MagicBytes = new byte[] { 0x53, 0x5a, 0x44, 0x44, 0x88, 0xf0, 0x27, 0x33 };
|
||||
|
||||
public static readonly string MagicString = System.Text.Encoding.ASCII.GetString(MagicBytes);
|
||||
|
||||
public const ulong MagicUInt64 = 0x3327f08844445a53;
|
||||
|
||||
public const int LZ_TABLE_SIZE = 0x1000;
|
||||
|
||||
public const int MAX_LZSTATES = 16;
|
||||
|
||||
public const int LZ_MIN_HANDLE = 0x400;
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZ
|
||||
{
|
||||
/// <see href="https://github.com/wine-mirror/wine/blob/master/include/lzexpand.h"/>
|
||||
public enum LZERROR
|
||||
{
|
||||
LZERROR_OK = 1,
|
||||
LZERROR_NOT_LZ = 0,
|
||||
LZERROR_BADINHANDLE = -1,
|
||||
LZERROR_BADOUTHANDLE = -2,
|
||||
LZERROR_READ = -3,
|
||||
LZERROR_WRITE = -4,
|
||||
LZERROR_GLOBALLOC = -5,
|
||||
LZERROR_GLOBLOCK = -6,
|
||||
LZERROR_BADVALUE = -7,
|
||||
LZERROR_UNKNOWNALG = -8,
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZ
|
||||
{
|
||||
/// <summary>
|
||||
/// Format of first 14 byte of LZ compressed file
|
||||
/// </summary>
|
||||
/// <see href="https://github.com/wine-mirror/wine/blob/master/dlls/kernel32/lzexpand.c"/>
|
||||
public sealed class FileHeaader
|
||||
{
|
||||
#if NET48
|
||||
public string Magic { get; set; }
|
||||
#else
|
||||
public string? Magic { get; set; }
|
||||
#endif
|
||||
|
||||
public byte CompressionType { get; set; }
|
||||
|
||||
public char LastChar { get; set; }
|
||||
|
||||
public uint RealLength { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
using System.IO;
|
||||
|
||||
namespace SabreTools.Models.Compression.LZ
|
||||
{
|
||||
public sealed class State
|
||||
{
|
||||
/// <summary>
|
||||
/// Internal backing stream
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Stream Source { get; set; }
|
||||
#else
|
||||
public Stream? Source { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// The last char of the filename for replacement
|
||||
/// </summary>
|
||||
public char LastChar { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Decompressed length of the file
|
||||
/// </summary>
|
||||
public uint RealLength { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Position the decompressor currently is
|
||||
/// </summary>
|
||||
public uint RealCurrent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Position the user wants to read from
|
||||
/// </summary>
|
||||
public uint RealWanted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The rotating LZ table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Table { get; set; }
|
||||
#else
|
||||
public byte[]? Table { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// CURrent TABle ENTry
|
||||
/// </summary>
|
||||
public uint CurrentTableEntry { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Length and position of current string
|
||||
/// </summary>
|
||||
public byte StringLength { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// From stringtable
|
||||
/// </summary>
|
||||
public uint StringPosition { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Bitmask within blocks
|
||||
/// </summary>
|
||||
public ushort ByteType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// GETLEN bytes
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Window { get; set; }
|
||||
#else
|
||||
public byte[]? Window { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Current read
|
||||
/// </summary>
|
||||
public uint WindowCurrent { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Length last got
|
||||
/// </summary>
|
||||
public uint WindowLength { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
/// <summary>
|
||||
/// An aligned offset block is identical to the verbatim block except for the presence of the aligned offset
|
||||
/// tree preceding the other trees.
|
||||
/// </summary>
|
||||
/// <see href="https://interoperability.blob.core.windows.net/files/MS-PATCH/%5bMS-PATCH%5d.pdf"/>
|
||||
public class AlignedOffsetBlock
|
||||
{
|
||||
/// <summary>
|
||||
/// Generic block header
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public BlockHeader Header { get; set; }
|
||||
#else
|
||||
public BlockHeader? Header { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Aligned offset tree
|
||||
/// </summary>
|
||||
/// <remarks>8 elements, 3 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] AlignedOffsetTree { get; set; }
|
||||
#else
|
||||
public byte[]? AlignedOffsetTree { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Pretree for first 256 elements of main tree
|
||||
/// </summary>
|
||||
/// <remarks>20 elements, 4 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] PretreeFirst256 { get; set; }
|
||||
#else
|
||||
public byte[]? PretreeFirst256 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Path lengths of first 256 elements of main tree
|
||||
/// </summary>
|
||||
/// <remarks>Encoded using pretree</remarks>
|
||||
#if NET48
|
||||
public int[] PathLengthsFirst256 { get; set; }
|
||||
#else
|
||||
public int[]? PathLengthsFirst256 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Pretree for remainder of main tree
|
||||
/// </summary>
|
||||
/// <remarks>20 elements, 4 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] PretreeRemainder { get; set; }
|
||||
#else
|
||||
public byte[]? PretreeRemainder { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Path lengths of remaining elements of main tree
|
||||
/// </summary>
|
||||
/// <remarks>Encoded using pretree</remarks>
|
||||
#if NET48
|
||||
public int[] PathLengthsRemainder { get; set; }
|
||||
#else
|
||||
public int[]? PathLengthsRemainder { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Pretree for length tree
|
||||
/// </summary>
|
||||
/// <remarks>20 elements, 4 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] PretreeLengthTree { get; set; }
|
||||
#else
|
||||
public byte[]? PretreeLengthTree { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Path lengths of elements in length tree
|
||||
/// </summary>
|
||||
/// <remarks>Encoded using pretree</remarks>
|
||||
#if NET48
|
||||
public int[] PathLengthsLengthTree { get; set; }
|
||||
#else
|
||||
public int[]? PathLengthsLengthTree { get; set; }
|
||||
#endif
|
||||
|
||||
// Entry Comments Size
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Token sequence (matches and literals) Specified in section 2.6 Variable
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
/// <summary>
|
||||
/// An LZXD block represents a sequence of compressed data that is encoded with the same set of
|
||||
/// Huffman trees, or a sequence of uncompressed data. There can be one or more LZXD blocks in a
|
||||
/// compressed stream, each with its own set of Huffman trees. Blocks do not have to start or end on a
|
||||
/// chunk boundary; blocks can span multiple chunks, or a single chunk can contain multiple blocks. The
|
||||
/// number of chunks is related to the size of the data being compressed, while the number of blocks is
|
||||
/// related to how well the data is compressed. The Block Type field, as specified in section 2.3.1.1,
|
||||
/// indicates which type of block follows, and the Block Size field, as specified in section 2.3.1.2,
|
||||
/// indicates the number of uncompressed bytes represented by the block. Following the generic block
|
||||
/// header is a type-specific header that describes the remainder of the block.
|
||||
/// </summary>
|
||||
/// <see href="https://interoperability.blob.core.windows.net/files/MS-PATCH/%5bMS-PATCH%5d.pdf"/>
|
||||
public class BlockHeader
|
||||
{
|
||||
/// <remarks>3 bits</remarks>
|
||||
public BlockType BlockType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Block size is the high 8 bits of 24
|
||||
/// </summary>
|
||||
/// <remarks>8 bits</remarks>
|
||||
public byte BlockSizeMSB { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Block size is the middle 8 bits of 24
|
||||
/// </summary>
|
||||
/// <remarks>8 bits</remarks>
|
||||
public byte BlockSizeByte2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Block size is the low 8 bits of 24
|
||||
/// </summary>
|
||||
/// <remarks>8 bits</remarks>
|
||||
public byte BlocksizeLSB { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
public static class Constants
|
||||
{
|
||||
/* some constants defined by the LZX specification */
|
||||
public const int LZX_MIN_MATCH = (2);
|
||||
public const int LZX_MAX_MATCH = (257);
|
||||
public const int LZX_NUM_CHARS = (256);
|
||||
|
||||
/// <summary>
|
||||
/// also blocktypes 4-7 invalid
|
||||
/// </summary>
|
||||
public const int LZX_BLOCKTYPE_INVALID = (0);
|
||||
public const int LZX_BLOCKTYPE_VERBATIM = (1);
|
||||
public const int LZX_BLOCKTYPE_ALIGNED = (2);
|
||||
public const int LZX_BLOCKTYPE_UNCOMPRESSED = (3);
|
||||
public const int LZX_PRETREE_NUM_ELEMENTS = (20);
|
||||
|
||||
/// <summary>
|
||||
/// aligned offset tree #elements
|
||||
/// </summary>
|
||||
public const int LZX_ALIGNED_NUM_ELEMENTS = (8);
|
||||
|
||||
/// <summary>
|
||||
/// this one missing from spec!
|
||||
/// </summary>
|
||||
public const int LZX_NUM_PRIMARY_LENGTHS = (7);
|
||||
|
||||
/// <summary>
|
||||
/// length tree #elements
|
||||
/// </summary>
|
||||
public const int LZX_NUM_SECONDARY_LENGTHS = (249);
|
||||
|
||||
/* LZX huffman defines: tweak tablebits as desired */
|
||||
public const int LZX_PRETREE_MAXSYMBOLS = (LZX_PRETREE_NUM_ELEMENTS);
|
||||
public const int LZX_PRETREE_TABLEBITS = (6);
|
||||
public const int LZX_MAINTREE_MAXSYMBOLS = (LZX_NUM_CHARS + 50 * 8);
|
||||
public const int LZX_MAINTREE_TABLEBITS = (12);
|
||||
public const int LZX_LENGTH_MAXSYMBOLS = (LZX_NUM_SECONDARY_LENGTHS + 1);
|
||||
public const int LZX_LENGTH_TABLEBITS = (12);
|
||||
public const int LZX_ALIGNED_MAXSYMBOLS = (LZX_ALIGNED_NUM_ELEMENTS);
|
||||
public const int LZX_ALIGNED_TABLEBITS = (7);
|
||||
|
||||
public const int LZX_LENTABLE_SAFETY = (64); /* we allow length table decoding overruns */
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
/// <summary>
|
||||
/// 3-bit block type
|
||||
/// </summary>
|
||||
public enum BlockType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Not valid
|
||||
/// </summary>
|
||||
INVALID_0 = 0b000,
|
||||
|
||||
/// <summary>
|
||||
/// Verbatim block
|
||||
/// </summary>
|
||||
Verbatim = 0b001,
|
||||
|
||||
/// <summary>
|
||||
/// Aligned offset block
|
||||
/// </summary>
|
||||
AlignedOffset = 0b010,
|
||||
|
||||
/// <summary>
|
||||
/// Uncompressed block
|
||||
/// </summary>
|
||||
Uncompressed = 0b011,
|
||||
|
||||
/// <summary>
|
||||
/// Not valid
|
||||
/// </summary>
|
||||
INVALID_4 = 0b100,
|
||||
|
||||
/// <summary>
|
||||
/// Not valid
|
||||
/// </summary>
|
||||
INVALID_5 = 0b101,
|
||||
|
||||
/// <summary>
|
||||
/// Not valid
|
||||
/// </summary>
|
||||
INVALID_6 = 0b110,
|
||||
|
||||
/// <summary>
|
||||
/// Not valid
|
||||
/// </summary>
|
||||
INVALID_7 = 0b111,
|
||||
}
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
public class Header
|
||||
{
|
||||
/*
|
||||
2.2 Header
|
||||
|
||||
2.2.1 Chunk Size
|
||||
|
||||
The LZXD compressor emits chunks of compressed data. A chunk represents exactly 32 KB of
|
||||
uncompressed data until the last chunk in the stream, which can represent less than 32 KB. To
|
||||
ensure that an exact number of input bytes represent an exact number of output bytes for each
|
||||
chunk, after each 32 KB of uncompressed data is represented in the output compressed bitstream, the
|
||||
output bitstream is padded with up to 15 bits of zeros to realign the bitstream on a 16-bit boundary
|
||||
(even byte boundary) for the next 32 KB of data. This results in a compressed chunk of a byte-aligned
|
||||
size. The compressed chunk could be smaller than 32 KB or larger than 32 KB if the data is
|
||||
incompressible when the chunk is not the last one.
|
||||
|
||||
The LZXD engine encodes a compressed, chunk-size prefix field preceding each compressed chunk in
|
||||
the compressed byte stream. The compressed, chunk-size prefix field is a byte aligned, little-endian,
|
||||
16-bit field. The chunk prefix chain could be followed in the compressed stream without
|
||||
decompressing any data. The next chunk prefix is at a location computed by the absolute byte offset
|
||||
location of this chunk prefix plus 2 (for the size of the chunk-size prefix field) plus the current chunk
|
||||
size.
|
||||
|
||||
2.2.2 E8 Call Translation
|
||||
|
||||
E8 call translation is an optional feature that can be used when the data to compress contains x86
|
||||
instruction sequences. E8 translation operates as a preprocessing stage before compressing each
|
||||
chunk, and the compressed stream header contains a bit that indicates whether the decoder shall
|
||||
reverse the translation as a postprocessing step after decompressing each chunk.
|
||||
|
||||
The x86 instruction beginning with a byte value of 0xE8 is followed by a 32-bit, little-endian relative
|
||||
displacement to the call target. When E8 call translation is enabled, the following preprocessing steps
|
||||
are performed on the uncompressed input before compression (assuming little-endian byte ordering):
|
||||
|
||||
Let chunk_offset refer to the total number of uncompressed bytes preceding this chunk.
|
||||
|
||||
Let E8_file_size refer to the caller-specified value given to the compressor or decoded from the header
|
||||
of the compressed stream during decompression.
|
||||
|
||||
The following example shows how E8 translation is performed for each 32-KB chunk of uncompressed
|
||||
data (or less than 32 KB if last chunk to compress).
|
||||
|
||||
if (( chunk_offset < 0x40000000 ) && ( chunk_size > 10 ))
|
||||
for ( i = 0; i < (chunk_size – 10); i++ )
|
||||
if ( chunk_byte[ i ] == 0xE8 )
|
||||
long current_pointer = chunk_offset + i;
|
||||
long displacement = chunk_byte[ i+1 ] |
|
||||
chunk_byte[ i+2 ] << 8 |
|
||||
chunk_byte[ i+3 ] << 16 |
|
||||
chunk_byte[ i+4 ] << 24;
|
||||
long target = current_pointer + displacement;
|
||||
if (( target >= 0 ) && ( target < E8_file_size+current_pointer))
|
||||
if ( target >= E8_file_size )
|
||||
target = displacement – E8_file_size;
|
||||
endif
|
||||
chunk_byte[ i+1 ] = (byte)( target );
|
||||
chunk_byte[ i+2 ] = (byte)( target >> 8 );
|
||||
chunk_byte[ i+3 ] = (byte)( target >> 16 );
|
||||
chunk_byte[ i+4 ] = (byte)( target >> 24 );
|
||||
endif
|
||||
i += 4;
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
|
||||
After decompression, the E8 scanning algorithm is the same. The following example shows how E8
|
||||
translation reversal is performed.
|
||||
|
||||
long value = chunk_byte[ i+1 ] |
|
||||
chunk_byte[ i+2 ] << 8 |
|
||||
chunk_byte[ i+3 ] << 16 |
|
||||
chunk_byte[ i+4 ] << 24;
|
||||
if (( value >= -current_pointer ) && ( value < E8_file_size ))
|
||||
if ( value >= 0 )
|
||||
displacement = value – current_pointer;
|
||||
else
|
||||
displacement = value + E8_file_size;
|
||||
endif
|
||||
chunk_byte[ i+1 ] = (byte)( displacement );
|
||||
chunk_byte[ i+2 ] = (byte)( displacement >> 8 );
|
||||
chunk_byte[ i+3 ] = (byte)( displacement >> 16 );
|
||||
chunk_byte[ i+4 ] = (byte)( displacement >> 24 );
|
||||
endif
|
||||
|
||||
The first bit in the first chunk in the LZXD bitstream (following the 2-byte, chunk-size prefix described
|
||||
in section 2.2.1) indicates the presence or absence of two 16-bit fields immediately following the
|
||||
single bit. If the bit is set, E8 translation is enabled for all the following chunks in the stream using the
|
||||
32-bit value derived from the two 16-bit fields as the E8_file_size provided to the compressor when E8
|
||||
translation was enabled. Note that E8_file_size is completely independent of the length of the
|
||||
uncompressed data. E8 call translation is disabled after the 32,768th chunk (after 1 gigabyte (GB) of
|
||||
uncompressed data).
|
||||
|
||||
Field Comments Size
|
||||
----------------------------------------------------------------
|
||||
E8 translation 0-disabled, 1-enabled 1 bit
|
||||
Translation size high word Only present if enabled 0 or 16 bits
|
||||
Translation size low word Only present if enabled 0 or 16 bits
|
||||
*/
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
/// <summary>
|
||||
/// Following the generic block header, an uncompressed block begins with 1 to 16 bits of zero padding
|
||||
/// to align the bit buffer on a 16-bit boundary. At this point, the bitstream ends and a byte stream
|
||||
/// begins. Following the zero padding, new 32-bit values for R0, R1, and R2 are output in little-endian
|
||||
/// form, followed by the uncompressed data bytes themselves. Finally, if the uncompressed data length
|
||||
/// is odd, one extra byte of zero padding is encoded to realign the following bitstream.
|
||||
///
|
||||
/// Then the bitstream of byte-swapped 16-bit integers resumes for the next Block Type field (if there
|
||||
/// are subsequent blocks).
|
||||
///
|
||||
/// The decoded R0, R1, and R2 values are used as initial repeated offset values to decode the
|
||||
/// subsequent compressed block if present.
|
||||
/// </summary>
|
||||
/// <see href="https://interoperability.blob.core.windows.net/files/MS-PATCH/%5bMS-PATCH%5d.pdf"/>
|
||||
public class UncompressedBlock
|
||||
{
|
||||
/// <summary>
|
||||
/// Generic block header
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public BlockHeader Header { get; set; }
|
||||
#else
|
||||
public BlockHeader? Header { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Padding to align following field on 16-bit boundary
|
||||
/// </summary>
|
||||
/// <remarks>Bits have a value of zero</remarks>
|
||||
public ushort PaddingBits { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Least significant to most significant byte (little-endian DWORD ([MS-DTYP]))
|
||||
/// </summary>
|
||||
/// <remarks>Encoded directly in the byte stream, not in the bitstream of byte-swapped 16-bit words</remarks>
|
||||
public uint R0 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Least significant to most significant byte (little-endian DWORD)
|
||||
/// </summary>
|
||||
/// <remarks>Encoded directly in the byte stream, not in the bitstream of byte-swapped 16-bit words</remarks>
|
||||
public uint R1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Least significant to most significant byte (little-endian DWORD)
|
||||
/// </summary>
|
||||
/// <remarks>Encoded directly in the byte stream, not in the bitstream of byte-swapped 16-bit words</remarks>
|
||||
public uint R2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Can use the direct memcpy function, as specified in [IEEE1003.1]
|
||||
/// </summary>
|
||||
/// <remarks>Encoded directly in the byte stream, not in the bitstream of byte-swapped 16-bit words</remarks>
|
||||
#if NET48
|
||||
public byte[] RawDataBytes { get; set; }
|
||||
#else
|
||||
public byte[]? RawDataBytes { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Only if uncompressed size is odd
|
||||
/// </summary>
|
||||
public byte AlignmentByte { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.LZX
|
||||
{
|
||||
/// <summary>
|
||||
/// The fields of a verbatim block that follow the generic block header
|
||||
/// </summary>
|
||||
/// <see href="https://interoperability.blob.core.windows.net/files/MS-PATCH/%5bMS-PATCH%5d.pdf"/>
|
||||
public class VerbatimBlock
|
||||
{
|
||||
/// <summary>
|
||||
/// Generic block header
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public BlockHeader Header { get; set; }
|
||||
#else
|
||||
public BlockHeader? Header { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Pretree for first 256 elements of main tree
|
||||
/// </summary>
|
||||
/// <remarks>20 elements, 4 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] PretreeFirst256 { get; set; }
|
||||
#else
|
||||
public byte[]? PretreeFirst256 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Path lengths of first 256 elements of main tree
|
||||
/// </summary>
|
||||
/// <remarks>Encoded using pretree</remarks>
|
||||
#if NET48
|
||||
public int[] PathLengthsFirst256 { get; set; }
|
||||
#else
|
||||
public int[]? PathLengthsFirst256 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Pretree for remainder of main tree
|
||||
/// </summary>
|
||||
/// <remarks>20 elements, 4 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] PretreeRemainder { get; set; }
|
||||
#else
|
||||
public byte[]? PretreeRemainder { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Path lengths of remaining elements of main tree
|
||||
/// </summary>
|
||||
/// <remarks>Encoded using pretree</remarks>
|
||||
#if NET48
|
||||
public int[] PathLengthsRemainder { get; set; }
|
||||
#else
|
||||
public int[]? PathLengthsRemainder { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Pretree for length tree
|
||||
/// </summary>
|
||||
/// <remarks>20 elements, 4 bits each</remarks>
|
||||
#if NET48
|
||||
public byte[] PretreeLengthTree { get; set; }
|
||||
#else
|
||||
public byte[]? PretreeLengthTree { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Path lengths of elements in length tree
|
||||
/// </summary>
|
||||
/// <remarks>Encoded using pretree</remarks>
|
||||
#if NET48
|
||||
public int[] PathLengthsLengthTree { get; set; }
|
||||
#else
|
||||
public int[]? PathLengthsLengthTree { get; set; }
|
||||
#endif
|
||||
|
||||
// Entry Comments Size
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// Token sequence (matches and literals) Specified in section 2.6 Variable
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
/// <summary>
|
||||
/// Each MSZIP block MUST consist of a 2-byte MSZIP signature and one or more RFC 1951 blocks. The
|
||||
/// 2-byte MSZIP signature MUST consist of the bytes 0x43 and 0x4B. The MSZIP signature MUST be
|
||||
/// the first 2 bytes in the MSZIP block. The MSZIP signature is shown in the following packet diagram.
|
||||
///
|
||||
/// Each MSZIP block is the result of a single deflate compression operation, as defined in [RFC1951].
|
||||
/// The compressor that performs the compression operation MUST generate one or more RFC 1951
|
||||
/// blocks, as defined in [RFC1951]. The number, deflation mode, and type of RFC 1951 blocks in each
|
||||
/// MSZIP block is determined by the compressor, as defined in [RFC1951]. The last RFC 1951 block in
|
||||
/// each MSZIP block MUST be marked as the "end" of the stream(1), as defined by [RFC1951]
|
||||
/// section 3.2.3. Decoding trees MUST be discarded after each RFC 1951 block, but the history buffer
|
||||
/// MUST be maintained.Each MSZIP block MUST represent no more than 32 KB of uncompressed data.
|
||||
///
|
||||
/// The maximum compressed size of each MSZIP block is 32 KB + 12 bytes. This enables the MSZIP
|
||||
/// block to contain 32 KB of data split between two noncompressed RFC 1951 blocks, each of which
|
||||
/// has a value of BTYPE = 00.
|
||||
/// </summary>
|
||||
/// <see href="https://interoperability.blob.core.windows.net/files/MS-MCI/%5bMS-MCI%5d.pdf"/>
|
||||
public class BlockHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// 'CK'
|
||||
/// </summary>
|
||||
public ushort Signature { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
/// <see href="https://github.com/wine-mirror/wine/blob/master/dlls/cabinet/cabinet.h"/>
|
||||
public static class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Window size
|
||||
/// </summary>
|
||||
public const ushort ZIPWSIZE = 0x8000;
|
||||
|
||||
/// <summary>
|
||||
/// Bits in base literal/length lookup table
|
||||
/// </summary>
|
||||
public const int ZIPLBITS = 9;
|
||||
|
||||
/// <summary>
|
||||
/// Bits in base distance lookup table
|
||||
/// </summary>
|
||||
public const int ZIPDBITS = 6;
|
||||
|
||||
/// <summary>
|
||||
/// Maximum bit length of any code
|
||||
/// </summary>
|
||||
public const int ZIPBMAX = 16;
|
||||
|
||||
/// <summary>
|
||||
/// Maximum number of codes in any set
|
||||
/// </summary>
|
||||
public const int ZIPN_MAX = 288;
|
||||
|
||||
#region THOSE_ZIP_CONSTS
|
||||
|
||||
/// <summary>
|
||||
/// Order of the bit length code lengths
|
||||
/// </summary>
|
||||
public static readonly byte[] BitLengthOrder = new byte[]
|
||||
{
|
||||
16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Copy lengths for literal codes 257..285
|
||||
/// </summary>
|
||||
public static readonly ushort[] CopyLengths = new ushort[]
|
||||
{
|
||||
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51,
|
||||
59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Extra bits for literal codes 257..285
|
||||
/// </summary>
|
||||
/// <remarks>99 == invalid</remarks>
|
||||
public static readonly ushort[] LiteralExtraBits = new ushort[]
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,
|
||||
4, 5, 5, 5, 5, 0, 99, 99
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Copy offsets for distance codes 0..29
|
||||
/// </summary>
|
||||
public static readonly ushort[] CopyOffsets = new ushort[]
|
||||
{
|
||||
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385,
|
||||
513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Extra bits for distance codes
|
||||
/// </summary>
|
||||
public static readonly ushort[] DistanceExtraBits = new ushort[]
|
||||
{
|
||||
0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10,
|
||||
10, 11, 11, 12, 12, 13, 13
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// And'ing with Zipmask[n] masks the lower n bits
|
||||
/// </summary>
|
||||
public static readonly ushort[] BitMasks = new ushort[17]
|
||||
{
|
||||
0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
|
||||
0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
|
||||
};
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
/// <see href="https://www.rfc-editor.org/rfc/rfc1951"/>
|
||||
public class DeflateBlockHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// Set if and only if this is the last block of the data set.
|
||||
/// </summary>
|
||||
/// <remarks>Bit 0</remarks>
|
||||
public bool BFINAL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Specifies how the data are compressed
|
||||
/// </summary>
|
||||
/// <remarks>Bits 1-2</remarks>
|
||||
public CompressionType BTYPE { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
/// <summary>
|
||||
/// Compression with dynamic Huffman codes (BTYPE=10)
|
||||
/// </summary>
|
||||
/// <see href="https://www.rfc-editor.org/rfc/rfc1951"/>
|
||||
public class DynamicHuffmanCompressedBlockHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// Huffman code lengths for the literal / length alphabet
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public int[] LiteralLengths { get; set; }
|
||||
#else
|
||||
public int[]? LiteralLengths { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Huffman distance codes for the literal / length alphabet
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public int[] DistanceCodes { get; set; }
|
||||
#else
|
||||
public int[]? DistanceCodes { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
public enum CompressionType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// no compression
|
||||
/// </summary>
|
||||
NoCompression = 0b00,
|
||||
|
||||
/// <summary>
|
||||
/// Compressed with fixed Huffman codes
|
||||
/// </summary>
|
||||
FixedHuffman = 0b01,
|
||||
|
||||
/// <summary>
|
||||
/// Compressed with dynamic Huffman codes
|
||||
/// </summary>
|
||||
DynamicHuffman = 0b10,
|
||||
|
||||
/// <summary>
|
||||
/// Reserved (error)
|
||||
/// </summary>
|
||||
Reserved = 0b11,
|
||||
}
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
/// <summary>
|
||||
/// Compression with fixed Huffman codes (BTYPE=01)
|
||||
/// </summary>
|
||||
/// <see href="https://interoperability.blob.core.windows.net/files/MS-MCI/%5bMS-MCI%5d.pdf"/>
|
||||
/// <see href="https://www.rfc-editor.org/rfc/rfc1951"/>
|
||||
public class FixedHuffmanCompressedBlockHeader
|
||||
{
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Huffman code lengths for the literal / length alphabet
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public uint[] LiteralLengths
|
||||
#else
|
||||
public uint[]? LiteralLengths
|
||||
#endif
|
||||
{
|
||||
get
|
||||
{
|
||||
// If we have cached lengths, use those
|
||||
if (_literalLengths != null)
|
||||
return _literalLengths;
|
||||
|
||||
// Otherwise, build it from scratch
|
||||
_literalLengths = new uint[288];
|
||||
|
||||
// Literal Value 0 - 143, 8 bits
|
||||
for (int i = 0; i < 144; i++)
|
||||
_literalLengths[i] = 8;
|
||||
|
||||
// Literal Value 144 - 255, 9 bits
|
||||
for (int i = 144; i < 256; i++)
|
||||
_literalLengths[i] = 9;
|
||||
|
||||
// Literal Value 256 - 279, 7 bits
|
||||
for (int i = 256; i < 280; i++)
|
||||
_literalLengths[i] = 7;
|
||||
|
||||
// Literal Value 280 - 287, 8 bits
|
||||
for (int i = 280; i < 288; i++)
|
||||
_literalLengths[i] = 8;
|
||||
|
||||
return _literalLengths;
|
||||
}
|
||||
set
|
||||
{
|
||||
throw new FieldAccessException();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Huffman distance codes for the literal / length alphabet
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public uint[] DistanceCodes
|
||||
#else
|
||||
public uint[]? DistanceCodes
|
||||
#endif
|
||||
{
|
||||
get
|
||||
{
|
||||
// If we have cached distances, use those
|
||||
if (_distanceCodes != null)
|
||||
return _distanceCodes;
|
||||
|
||||
// Otherwise, build it from scratch
|
||||
_distanceCodes = new uint[30];
|
||||
|
||||
// Fixed length, 5 bits
|
||||
for (int i = 0; i < 30; i++)
|
||||
_distanceCodes[i] = 5;
|
||||
|
||||
return _distanceCodes;
|
||||
}
|
||||
set
|
||||
{
|
||||
throw new FieldAccessException();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Instance Variables
|
||||
|
||||
/// <summary>
|
||||
/// Huffman code lengths for the literal / length alphabet
|
||||
/// </summary>
|
||||
#if NET48
|
||||
private uint[] _literalLengths = null;
|
||||
#else
|
||||
private uint[]? _literalLengths = null;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Huffman distance codes for the literal / length alphabet
|
||||
/// </summary>
|
||||
#if NET48
|
||||
private uint[] _distanceCodes = null;
|
||||
#else
|
||||
private uint[]? _distanceCodes = null;
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.MSZIP
|
||||
{
|
||||
/// <summary>
|
||||
/// Non-compressed blocks (BTYPE=00)
|
||||
/// </summary>
|
||||
/// <see href="https://www.rfc-editor.org/rfc/rfc1951"/>
|
||||
public class NonCompressedBlockHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// The number of data bytes in the block
|
||||
/// </summary>
|
||||
/// <remarks>Bytes 0-1</remarks>
|
||||
public ushort LEN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The one's complement of LEN
|
||||
/// </summary>
|
||||
/// <remarks>Bytes 2-3</remarks>
|
||||
public ushort NLEN { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.Quantum
|
||||
{
|
||||
public static class Constants
|
||||
{
|
||||
/// <summary>
|
||||
/// Mask for Quantum Compression Level
|
||||
/// </summary>
|
||||
public const ushort MASK_QUANTUM_LEVEL = 0x00F0;
|
||||
|
||||
/// <summary>
|
||||
/// Lowest Quantum Level (1)
|
||||
/// </summary>
|
||||
public const ushort QUANTUM_LEVEL_LO = 0x0010;
|
||||
|
||||
/// <summary>
|
||||
/// Highest Quantum Level (7)
|
||||
/// </summary>
|
||||
public const ushort QUANTUM_LEVEL_HI = 0x0070;
|
||||
|
||||
/// <summary>
|
||||
/// Amount to shift over to get int
|
||||
/// </summary>
|
||||
public const ushort SHIFT_QUANTUM_LEVEL = 4;
|
||||
|
||||
/// <summary>
|
||||
/// Mask for Quantum Compression Memory
|
||||
/// </summary>
|
||||
public const ushort MASK_QUANTUM_MEM = 0x1F00;
|
||||
|
||||
/// <summary>
|
||||
/// Lowest Quantum Memory (10)
|
||||
/// </summary>
|
||||
public const ushort QUANTUM_MEM_LO = 0x0A00;
|
||||
|
||||
/// <summary>
|
||||
/// Highest Quantum Memory (21)
|
||||
/// </summary>
|
||||
public const ushort QUANTUM_MEM_HI = 0x1500;
|
||||
|
||||
/// <summary>
|
||||
/// Amount to shift over to get int
|
||||
/// </summary>
|
||||
public const ushort SHIFT_QUANTUM_MEM = 8;
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.Quantum
|
||||
{
|
||||
public enum SelectorModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Literal model, 64 entries, start at symbol 0
|
||||
/// </summary>
|
||||
SELECTOR_0 = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Literal model, 64 entries, start at symbol 64
|
||||
/// </summary>
|
||||
SELECTOR_1 = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Literal model, 64 entries, start at symbol 128
|
||||
/// </summary>
|
||||
SELECTOR_2 = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Literal model, 64 entries, start at symbol 192
|
||||
/// </summary>
|
||||
SELECTOR_3 = 3,
|
||||
|
||||
/// <summary>
|
||||
/// LZ model, 3 character matches, max 24 entries, start at symbol 0
|
||||
/// </summary>
|
||||
SELECTOR_4 = 4,
|
||||
|
||||
/// <summary>
|
||||
/// LZ model, 4 character matches, max 36 entries, start at symbol 0
|
||||
/// </summary>
|
||||
SELECTOR_5 = 5,
|
||||
|
||||
/// <summary>
|
||||
/// LZ model, 5+ character matches, max 42 entries, start at symbol 0
|
||||
/// </summary>
|
||||
SELECTOR_6_POSITION = 6,
|
||||
|
||||
/// <summary>
|
||||
/// LZ model, 5+ character matches, 27 entries, start at symbol 0
|
||||
/// </summary>
|
||||
SELECTOR_6_LENGTH = 7,
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.Quantum
|
||||
{
|
||||
/// <see href="https://github.com/wine-mirror/wine/blob/master/dlls/cabinet/cabinet.h"/>
|
||||
/// <see href="http://www.russotto.net/quantumcomp.html"/>
|
||||
public sealed class Model
|
||||
{
|
||||
public int TimeToReorder { get; set; }
|
||||
|
||||
public int Entries { get; set; }
|
||||
|
||||
#if NET48
|
||||
public ModelSymbol[] Symbols { get; set; }
|
||||
#else
|
||||
public ModelSymbol?[]? Symbols { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public ushort[] LookupTable { get; set; } = new ushort[256];
|
||||
#else
|
||||
public ushort[]? LookupTable { get; set; } = new ushort[256];
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
namespace SabreTools.Models.Compression.Quantum
|
||||
{
|
||||
/// <see href="https://github.com/wine-mirror/wine/blob/master/dlls/cabinet/cabinet.h"/>
|
||||
/// <see href="http://www.russotto.net/quantumcomp.html"/>
|
||||
public sealed class ModelSymbol
|
||||
{
|
||||
public ushort Symbol { get; set; }
|
||||
|
||||
public ushort CumulativeFrequency { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
namespace SabreTools.Models.DosCenter
|
||||
{
|
||||
/// <remarks>doscenter</remarks>
|
||||
public class DosCenter
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>description</remarks>
|
||||
#if NET48
|
||||
public string Description { get; set; }
|
||||
#else
|
||||
public string? Description { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>version</remarks>
|
||||
#if NET48
|
||||
public string Version { get; set; }
|
||||
#else
|
||||
public string? Version { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>date</remarks>
|
||||
#if NET48
|
||||
public string Date { get; set; }
|
||||
#else
|
||||
public string? Date { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>author</remarks>
|
||||
#if NET48
|
||||
public string Author { get; set; }
|
||||
#else
|
||||
public string? Author { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>homepage</remarks>
|
||||
#if NET48
|
||||
public string Homepage { get; set; }
|
||||
#else
|
||||
public string? Homepage { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>comment</remarks>
|
||||
#if NET48
|
||||
public string Comment { get; set; }
|
||||
#else
|
||||
public string? Comment { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
namespace SabreTools.Models.DosCenter
|
||||
{
|
||||
/// <remarks>game</remarks>
|
||||
public class Game
|
||||
{
|
||||
/// <remarks>name</remarks>
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>file</remarks>
|
||||
#if NET48
|
||||
public File[] File { get; set; }
|
||||
#else
|
||||
public File[]? File { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
namespace SabreTools.Models.DosCenter
|
||||
{
|
||||
public class MetadataFile
|
||||
{
|
||||
/// <remarks>doscenter</remarks>
|
||||
#if NET48
|
||||
public DosCenter DosCenter { get; set; }
|
||||
#else
|
||||
public DosCenter? DosCenter { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>game</remarks>
|
||||
#if NET48
|
||||
public Game[] Game { get; set; }
|
||||
#else
|
||||
public Game[]? Game { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
namespace SabreTools.Models.EverdriveSMDB
|
||||
{
|
||||
/// <summary>
|
||||
/// SHA-256 \t Machine Name/Filename \t SHA-1 \t MD5 \t CRC32 \t Size (Optional)
|
||||
/// </summary>
|
||||
public class Row
|
||||
{
|
||||
[Required]
|
||||
#if NET48
|
||||
public string SHA256 { get; set; }
|
||||
#else
|
||||
public string? SHA256 { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
#if NET48
|
||||
public string SHA1 { get; set; }
|
||||
#else
|
||||
public string? SHA1 { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
#if NET48
|
||||
public string MD5 { get; set; }
|
||||
#else
|
||||
public string? MD5 { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
#if NET48
|
||||
public string CRC32 { get; set; }
|
||||
#else
|
||||
public string? CRC32 { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public string Size { get; set; }
|
||||
#else
|
||||
public string? Size { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
namespace SabreTools.Models.Hashfile
|
||||
{
|
||||
/// <remarks>Hashfiles can only contain one type of hash at a time</remarks>
|
||||
public class Hashfile
|
||||
{
|
||||
#if NET48
|
||||
public SFV[] SFV { get; set; }
|
||||
#else
|
||||
public SFV[]? SFV { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public MD5[] MD5 { get; set; }
|
||||
#else
|
||||
public MD5[]? MD5 { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public SHA1[] SHA1 { get; set; }
|
||||
#else
|
||||
public SHA1[]? SHA1 { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public SHA256[] SHA256 { get; set; }
|
||||
#else
|
||||
public SHA256[]? SHA256 { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public SHA384[] SHA384 { get; set; }
|
||||
#else
|
||||
public SHA384[]? SHA384 { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public SHA512[] SHA512 { get; set; }
|
||||
#else
|
||||
public SHA512[]? SHA512 { get; set; }
|
||||
#endif
|
||||
|
||||
#if NET48
|
||||
public SpamSum[] SpamSum { get; set; }
|
||||
#else
|
||||
public SpamSum[]? SpamSum { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace SabreTools.Models.InstallShieldCabinet
|
||||
{
|
||||
/// <see href="https://github.com/twogood/unshield/blob/main/lib/cabfile.h"/>
|
||||
[Flags]
|
||||
public enum FileFlags : ushort
|
||||
{
|
||||
FILE_SPLIT = 1,
|
||||
FILE_OBFUSCATED = 2,
|
||||
FILE_COMPRESSED = 4,
|
||||
FILE_INVALID = 8,
|
||||
}
|
||||
|
||||
/// <see href="https://github.com/twogood/unshield/blob/main/lib/cabfile.h"/>
|
||||
public enum LinkFlags : byte
|
||||
{
|
||||
LINK_NONE = 0,
|
||||
LINK_PREV = 1,
|
||||
LINK_NEXT = 2,
|
||||
LINK_BOTH = 3,
|
||||
}
|
||||
}
|
||||
@@ -1,162 +0,0 @@
|
||||
namespace SabreTools.Models.InstallShieldCabinet
|
||||
{
|
||||
/// <see href="https://github.com/twogood/unshield/blob/main/lib/libunshield.h"/>
|
||||
public sealed class FileGroup
|
||||
{
|
||||
/// <summary>
|
||||
/// Offset to the file group name
|
||||
/// </summary>
|
||||
public uint NameOffset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// File group name
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Size of the expanded data
|
||||
/// </summary>
|
||||
public uint ExpandedSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved0 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved0 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Size of the compressed data
|
||||
/// </summary>
|
||||
public uint CompressedSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved1 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved2 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved2 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Attribute(?)
|
||||
/// </summary>
|
||||
public ushort Attribute1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Attribute(?)
|
||||
/// </summary>
|
||||
public ushort Attribute2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Index of the first file
|
||||
/// </summary>
|
||||
public uint FirstFile { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Index of the last file
|
||||
/// </summary>
|
||||
public uint LastFile { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Unknown offset(?)
|
||||
/// </summary>
|
||||
public uint UnknownOffset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Var 4 offset(?)
|
||||
/// </summary>
|
||||
public uint Var4Offset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Var 1 offset(?)
|
||||
/// </summary>
|
||||
public uint Var1Offset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset to the HTTP location
|
||||
/// </summary>
|
||||
public uint HTTPLocationOffset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset to the FTP location
|
||||
/// </summary>
|
||||
public uint FTPLocationOffset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Misc offset(?)
|
||||
/// </summary>
|
||||
public uint MiscOffset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Var 2 offset(?)
|
||||
/// </summary>
|
||||
public uint Var2Offset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset to the target directory
|
||||
/// </summary>
|
||||
public uint TargetDirectoryOffset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved3 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved3 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved4 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved4 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved5 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved5 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved6 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved6 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved7 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved7 { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
7
LICENSE
Normal file
7
LICENSE
Normal file
@@ -0,0 +1,7 @@
|
||||
Copyright (c) 2018-2025 Matt Nadareski
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -1,161 +0,0 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The `LINEAR` executable-file header contains information that the loader requires for
|
||||
/// segmented executable files. This information includes the linker version number, data
|
||||
/// specified by linker, data specified by resource compiler, tables of segment data, tables
|
||||
/// of resource data, and so on. The following illustrations shows the LE file header:
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
public sealed class Executable
|
||||
{
|
||||
/// <summary>
|
||||
/// MS-DOS executable stub
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public MSDOS.Executable Stub { get; set; }
|
||||
#else
|
||||
public MSDOS.Executable? Stub { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Information block
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public InformationBlock InformationBlock { get; set; }
|
||||
#else
|
||||
public InformationBlock? InformationBlock { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Object table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ObjectTableEntry[] ObjectTable { get; set; }
|
||||
#else
|
||||
public ObjectTableEntry?[]? ObjectTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Object page map
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ObjectPageMapEntry[] ObjectPageMap { get; set; }
|
||||
#else
|
||||
public ObjectPageMapEntry?[]? ObjectPageMap { get; set; }
|
||||
#endif
|
||||
|
||||
// TODO: Object iterate data map table (Undefined)
|
||||
|
||||
/// <summary>
|
||||
/// Resource table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ResourceTableEntry[] ResourceTable { get; set; }
|
||||
#else
|
||||
public ResourceTableEntry?[]? ResourceTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Resident Name table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ResidentNamesTableEntry[] ResidentNamesTable { get; set; }
|
||||
#else
|
||||
public ResidentNamesTableEntry?[]? ResidentNamesTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Entry table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public EntryTableBundle[] EntryTable { get; set; }
|
||||
#else
|
||||
public EntryTableBundle?[]? EntryTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Module format directives table (optional)
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ModuleFormatDirectivesTableEntry[] ModuleFormatDirectivesTable { get; set; }
|
||||
#else
|
||||
public ModuleFormatDirectivesTableEntry?[]? ModuleFormatDirectivesTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Verify record directive table (optional)
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public VerifyRecordDirectiveTableEntry[] VerifyRecordDirectiveTable { get; set; }
|
||||
#else
|
||||
public VerifyRecordDirectiveTableEntry?[]? VerifyRecordDirectiveTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Fix-up page table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public FixupPageTableEntry[] FixupPageTable { get; set; }
|
||||
#else
|
||||
public FixupPageTableEntry?[]? FixupPageTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Fix-up record table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public FixupRecordTableEntry[] FixupRecordTable { get; set; }
|
||||
#else
|
||||
public FixupRecordTableEntry?[]? FixupRecordTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Import module name table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ImportModuleNameTableEntry[] ImportModuleNameTable { get; set; }
|
||||
#else
|
||||
public ImportModuleNameTableEntry?[]? ImportModuleNameTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Import procedure name table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ImportModuleProcedureNameTableEntry[] ImportModuleProcedureNameTable { get; set; }
|
||||
#else
|
||||
public ImportModuleProcedureNameTableEntry?[]? ImportModuleProcedureNameTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Per-Page checksum table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public PerPageChecksumTableEntry[] PerPageChecksumTable { get; set; }
|
||||
#else
|
||||
public PerPageChecksumTableEntry?[]? PerPageChecksumTable { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Non-Resident Name table
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public NonResidentNamesTableEntry[] NonResidentNamesTable { get; set; }
|
||||
#else
|
||||
public NonResidentNamesTableEntry?[]? NonResidentNamesTable { get; set; }
|
||||
#endif
|
||||
|
||||
// TODO: Non-resident directives data (Undefined)
|
||||
|
||||
/// <summary>
|
||||
/// Debug information
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DebugInformation DebugInformation { get; set; }
|
||||
#else
|
||||
public DebugInformation? DebugInformation { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
namespace SabreTools.Models.Listrom
|
||||
{
|
||||
public class MetadataFile
|
||||
{
|
||||
#if NET48
|
||||
public Set[] Set { get; set; }
|
||||
#else
|
||||
public Set[]? Set { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
#if NET48
|
||||
public string[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public string[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("adjuster")]
|
||||
public class Adjuster
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("condition")]
|
||||
#if NET48
|
||||
public Condition Condition { get; set; }
|
||||
#else
|
||||
public Condition? Condition { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("analog")]
|
||||
public class Analog
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("mask")]
|
||||
#if NET48
|
||||
public string Mask { get; set; }
|
||||
#else
|
||||
public string? Mask { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("biosset")]
|
||||
public class BiosSet
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("description")]
|
||||
#if NET48
|
||||
public string Description { get; set; }
|
||||
#else
|
||||
public string? Description { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("chip")]
|
||||
public class Chip
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(cpu|audio)</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("type")]
|
||||
#if NET48
|
||||
public string Type { get; set; }
|
||||
#else
|
||||
public string? Type { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Only present in older versions</remarks>
|
||||
[XmlAttribute("soundonly")]
|
||||
#if NET48
|
||||
public string SoundOnly { get; set; }
|
||||
#else
|
||||
public string? SoundOnly { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("clock")]
|
||||
#if NET48
|
||||
public string Clock { get; set; }
|
||||
#else
|
||||
public string? Clock { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("condition")]
|
||||
public class Condition
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("mask")]
|
||||
#if NET48
|
||||
public string Mask { get; set; }
|
||||
#else
|
||||
public string? Mask { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(eq|ne|gt|le|lt|ge)</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("relation")]
|
||||
#if NET48
|
||||
public string Relation { get; set; }
|
||||
#else
|
||||
public string? Relation { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("value")]
|
||||
#if NET48
|
||||
public string Value { get; set; }
|
||||
#else
|
||||
public string? Value { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("conflocation")]
|
||||
public class ConfLocation
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Numeric?</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("number")]
|
||||
#if NET48
|
||||
public string Number { get; set; }
|
||||
#else
|
||||
public string? Number { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("inverted")]
|
||||
#if NET48
|
||||
public string Inverted { get; set; }
|
||||
#else
|
||||
public string? Inverted { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("confsetting")]
|
||||
public class ConfSetting
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("value")]
|
||||
#if NET48
|
||||
public string Value { get; set; }
|
||||
#else
|
||||
public string? Value { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("condition")]
|
||||
#if NET48
|
||||
public Condition Condition { get; set; }
|
||||
#else
|
||||
public Condition? Condition { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("configuration")]
|
||||
public class Configuration
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("mask")]
|
||||
#if NET48
|
||||
public string Mask { get; set; }
|
||||
#else
|
||||
public string? Mask { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("condition")]
|
||||
#if NET48
|
||||
public Condition Condition { get; set; }
|
||||
#else
|
||||
public Condition? Condition { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("conflocation")]
|
||||
#if NET48
|
||||
public ConfLocation[] ConfLocation { get; set; }
|
||||
#else
|
||||
public ConfLocation[]? ConfLocation { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("confsetting")]
|
||||
#if NET48
|
||||
public ConfSetting[] ConfSetting { get; set; }
|
||||
#else
|
||||
public ConfSetting[]? ConfSetting { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("device")]
|
||||
public class Device
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("type")]
|
||||
#if NET48
|
||||
public string Type { get; set; }
|
||||
#else
|
||||
public string? Type { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("fixed_image")]
|
||||
#if NET48
|
||||
public string FixedImage { get; set; }
|
||||
#else
|
||||
public string? FixedImage { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Numeric boolean</remarks>
|
||||
[XmlAttribute("mandatory")]
|
||||
#if NET48
|
||||
public string Mandatory { get; set; }
|
||||
#else
|
||||
public string? Mandatory { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("interface")]
|
||||
#if NET48
|
||||
public string Interface { get; set; }
|
||||
#else
|
||||
public string? Interface { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("instance")]
|
||||
#if NET48
|
||||
public Instance Instance { get; set; }
|
||||
#else
|
||||
public Instance? Instance { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("extension")]
|
||||
#if NET48
|
||||
public Extension[] Extension { get; set; }
|
||||
#else
|
||||
public Extension[]? Extension { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("device_ref")]
|
||||
public class DeviceRef
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("diplocation")]
|
||||
public class DipLocation
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Numeric?</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("number")]
|
||||
#if NET48
|
||||
public string Number { get; set; }
|
||||
#else
|
||||
public string? Number { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("inverted")]
|
||||
#if NET48
|
||||
public string Inverted { get; set; }
|
||||
#else
|
||||
public string? Inverted { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("dipswitch")]
|
||||
public class DipSwitch
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("mask")]
|
||||
#if NET48
|
||||
public string Mask { get; set; }
|
||||
#else
|
||||
public string? Mask { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("condition")]
|
||||
#if NET48
|
||||
public Condition Condition { get; set; }
|
||||
#else
|
||||
public Condition? Condition { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("diplocation")]
|
||||
#if NET48
|
||||
public DipLocation[] DipLocation { get; set; }
|
||||
#else
|
||||
public DipLocation[]? DipLocation { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("dipvalue")]
|
||||
#if NET48
|
||||
public DipValue[] DipValue { get; set; }
|
||||
#else
|
||||
public DipValue[]? DipValue { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("dipvalue")]
|
||||
public class DipValue
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("value")]
|
||||
#if NET48
|
||||
public string Value { get; set; }
|
||||
#else
|
||||
public string? Value { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("condition")]
|
||||
#if NET48
|
||||
public Condition Condition { get; set; }
|
||||
#else
|
||||
public Condition? Condition { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("extension")]
|
||||
public class Extension
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("feature")]
|
||||
public class Feature
|
||||
{
|
||||
/// <remarks>(protection|timing|graphics|palette|sound|capture|camera|microphone|controls|keyboard|mouse|media|disk|printer|tape|punch|drum|rom|comms|lan|wan)</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("type")]
|
||||
#if NET48
|
||||
public string Type { get; set; }
|
||||
#else
|
||||
public string? Type { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(unemulated|imperfect)</remarks>
|
||||
[XmlAttribute("status")]
|
||||
#if NET48
|
||||
public string Status { get; set; }
|
||||
#else
|
||||
public string? Status { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(unemulated|imperfect)</remarks>
|
||||
[XmlAttribute("overall")]
|
||||
#if NET48
|
||||
public string Overall { get; set; }
|
||||
#else
|
||||
public string? Overall { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("instance")]
|
||||
public class Instance
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("briefname")]
|
||||
#if NET48
|
||||
public string BriefName { get; set; }
|
||||
#else
|
||||
public string? BriefName { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("m1")]
|
||||
public class M1
|
||||
{
|
||||
[XmlAttribute("version")]
|
||||
#if NET48
|
||||
public string Version { get; set; }
|
||||
#else
|
||||
public string? Version { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("machine", typeof(Machine))]
|
||||
[XmlElement("game", typeof(Game))]
|
||||
#if NET48
|
||||
public GameBase[] Game { get; set; }
|
||||
#else
|
||||
public GameBase[]? Game { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("mame")]
|
||||
public class Mame
|
||||
{
|
||||
[XmlAttribute("build")]
|
||||
#if NET48
|
||||
public string Build { get; set; }
|
||||
#else
|
||||
public string? Build { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("debug")]
|
||||
#if NET48
|
||||
public string Debug { get; set; }
|
||||
#else
|
||||
public string? Debug { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("mameconfig")]
|
||||
#if NET48
|
||||
public string MameConfig { get; set; }
|
||||
#else
|
||||
public string? MameConfig { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("machine", typeof(Machine))]
|
||||
[XmlElement("game", typeof(Game))]
|
||||
#if NET48
|
||||
public GameBase[] Game { get; set; }
|
||||
#else
|
||||
public GameBase[]? Game { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("port")]
|
||||
public class Port
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("analog")]
|
||||
#if NET48
|
||||
public Analog[] Analog { get; set; }
|
||||
#else
|
||||
public Analog[]? Analog { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("ramoption")]
|
||||
public class RamOption
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlText]
|
||||
#if NET48
|
||||
public string Content { get; set; }
|
||||
#else
|
||||
public string? Content { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("sample")]
|
||||
public class Sample
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("slot")]
|
||||
public class Slot
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("slotoption")]
|
||||
#if NET48
|
||||
public SlotOption[] SlotOption { get; set; }
|
||||
#else
|
||||
public SlotOption[]? SlotOption { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("slotoption")]
|
||||
public class SlotOption
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("devname")]
|
||||
#if NET48
|
||||
public string DevName { get; set; }
|
||||
#else
|
||||
public string? DevName { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("softwarelist")]
|
||||
public class SoftwareList
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(original|compatible)</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("status")]
|
||||
#if NET48
|
||||
public string Status { get; set; }
|
||||
#else
|
||||
public string? Status { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("filter")]
|
||||
#if NET48
|
||||
public string Filter { get; set; }
|
||||
#else
|
||||
public string? Filter { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Listxml
|
||||
{
|
||||
[XmlRoot("sound")]
|
||||
public class Sound
|
||||
{
|
||||
/// <remarks>Numeric</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("channels")]
|
||||
#if NET48
|
||||
public string Channels { get; set; }
|
||||
#else
|
||||
public string? Channels { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("archive")]
|
||||
public class Archive
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("biosset")]
|
||||
public class BiosSet
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("description")]
|
||||
#if NET48
|
||||
public string Description { get; set; }
|
||||
#else
|
||||
public string? Description { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("clrmamepro")]
|
||||
public class ClrMamePro
|
||||
{
|
||||
[XmlAttribute("header")]
|
||||
#if NET48
|
||||
public string Header { get; set; }
|
||||
#else
|
||||
public string? Header { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(none|split|merged|nonmerged|fullmerged|device|full) "split"</remarks>
|
||||
[XmlAttribute("forcemerging")]
|
||||
#if NET48
|
||||
public string ForceMerging { get; set; }
|
||||
#else
|
||||
public string? ForceMerging { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(obsolete|required|ignore) "obsolete"</remarks>
|
||||
[XmlAttribute("forcenodump")]
|
||||
#if NET48
|
||||
public string ForceNodump { get; set; }
|
||||
#else
|
||||
public string? ForceNodump { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(zip|unzip) "zip"</remarks>
|
||||
[XmlAttribute("forcepacking")]
|
||||
#if NET48
|
||||
public string ForcePacking { get; set; }
|
||||
#else
|
||||
public string? ForcePacking { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("datafile")]
|
||||
public class Datafile
|
||||
{
|
||||
[XmlAttribute("build")]
|
||||
#if NET48
|
||||
public string Build { get; set; }
|
||||
#else
|
||||
public string? Build { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("debug")]
|
||||
#if NET48
|
||||
public string Debug { get; set; }
|
||||
#else
|
||||
public string? Debug { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>No-Intro extension</remarks>
|
||||
[XmlAttribute(Namespace = "http://www.w3.org/2001/XMLSchema-instance", AttributeName = "schemaLocation")]
|
||||
#if NET48
|
||||
public string SchemaLocation { get; set; }
|
||||
#else
|
||||
public string? SchemaLocation { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("header")]
|
||||
#if NET48
|
||||
public Header Header { get; set; }
|
||||
#else
|
||||
public Header? Header { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("game", typeof(Game))]
|
||||
[XmlElement("machine", typeof(Machine))]
|
||||
#if NET48
|
||||
public GameBase[] Game { get; set; }
|
||||
#else
|
||||
public GameBase[]? Game { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>RomVault extension</remarks>
|
||||
[XmlElement("dir")]
|
||||
#if NET48
|
||||
public Dir[] Dir { get; set; }
|
||||
#else
|
||||
public Dir[]? Dir { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("device_ref")]
|
||||
public class DeviceRef
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("dir")]
|
||||
public class Dir
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("game", typeof(Game))]
|
||||
[XmlElement("machine", typeof(Machine))]
|
||||
#if NET48
|
||||
public GameBase[] Game { get; set; }
|
||||
#else
|
||||
public GameBase[]? Game { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("disk")]
|
||||
public class Disk
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("md5")]
|
||||
#if NET48
|
||||
public string MD5 { get; set; }
|
||||
#else
|
||||
public string? MD5 { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("sha1")]
|
||||
#if NET48
|
||||
public string SHA1 { get; set; }
|
||||
#else
|
||||
public string? SHA1 { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("merge")]
|
||||
#if NET48
|
||||
public string Merge { get; set; }
|
||||
#else
|
||||
public string? Merge { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(baddump|nodump|good|verified) "good"</remarks>
|
||||
[XmlAttribute("status")]
|
||||
#if NET48
|
||||
public string Status { get; set; }
|
||||
#else
|
||||
public string? Status { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>MAME extension</remarks>
|
||||
[XmlAttribute("region")]
|
||||
#if NET48
|
||||
public string Region { get; set; }
|
||||
#else
|
||||
public string? Region { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("media")]
|
||||
public class Media
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("md5")]
|
||||
#if NET48
|
||||
public string MD5 { get; set; }
|
||||
#else
|
||||
public string? MD5 { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("sha1")]
|
||||
#if NET48
|
||||
public string SHA1 { get; set; }
|
||||
#else
|
||||
public string? SHA1 { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("sha256")]
|
||||
#if NET48
|
||||
public string SHA256 { get; set; }
|
||||
#else
|
||||
public string? SHA256 { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("spamsum")]
|
||||
#if NET48
|
||||
public string SpamSum { get; set; }
|
||||
#else
|
||||
public string? SpamSum { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("release")]
|
||||
public class Release
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("region")]
|
||||
#if NET48
|
||||
public string Region { get; set; }
|
||||
#else
|
||||
public string? Region { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("language")]
|
||||
#if NET48
|
||||
public string Language { get; set; }
|
||||
#else
|
||||
public string? Language { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("date")]
|
||||
#if NET48
|
||||
public string Date { get; set; }
|
||||
#else
|
||||
public string? Date { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
#if NET48
|
||||
public string Default { get; set; }
|
||||
#else
|
||||
public string? Default { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("sample")]
|
||||
public class Sample
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("softwarelist")]
|
||||
public class SoftwareList
|
||||
{
|
||||
[Required]
|
||||
[XmlAttribute("tag")]
|
||||
#if NET48
|
||||
public string Tag { get; set; }
|
||||
#else
|
||||
public string? Tag { get; set; }
|
||||
#endif
|
||||
|
||||
[Required]
|
||||
[XmlAttribute("name")]
|
||||
#if NET48
|
||||
public string Name { get; set; }
|
||||
#else
|
||||
public string? Name { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>(original|compatible)</remarks>
|
||||
[Required]
|
||||
[XmlAttribute("status")]
|
||||
#if NET48
|
||||
public string Status { get; set; }
|
||||
#else
|
||||
public string? Status { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlAttribute("filter")]
|
||||
#if NET48
|
||||
public string Filter { get; set; }
|
||||
#else
|
||||
public string? Filter { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
128
Logiqx/Trurip.cs
128
Logiqx/Trurip.cs
@@ -1,128 +0,0 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace SabreTools.Models.Logiqx
|
||||
{
|
||||
[XmlRoot("trurip")]
|
||||
public class Trurip
|
||||
{
|
||||
[XmlElement("titleid")]
|
||||
#if NET48
|
||||
public string TitleID { get; set; }
|
||||
#else
|
||||
public string? TitleID { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("publisher")]
|
||||
#if NET48
|
||||
public string Publisher { get; set; }
|
||||
#else
|
||||
public string? Publisher { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("developer")]
|
||||
#if NET48
|
||||
public string Developer { get; set; }
|
||||
#else
|
||||
public string? Developer { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("year")]
|
||||
#if NET48
|
||||
public string Year { get; set; }
|
||||
#else
|
||||
public string? Year { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("genre")]
|
||||
#if NET48
|
||||
public string Genre { get; set; }
|
||||
#else
|
||||
public string? Genre { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("subgenre")]
|
||||
#if NET48
|
||||
public string Subgenre { get; set; }
|
||||
#else
|
||||
public string? Subgenre { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("ratings")]
|
||||
#if NET48
|
||||
public string Ratings { get; set; }
|
||||
#else
|
||||
public string? Ratings { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("score")]
|
||||
#if NET48
|
||||
public string Score { get; set; }
|
||||
#else
|
||||
public string? Score { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("players")]
|
||||
#if NET48
|
||||
public string Players { get; set; }
|
||||
#else
|
||||
public string? Players { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Boolean?</remarks>
|
||||
[XmlElement("enabled")]
|
||||
#if NET48
|
||||
public string Enabled { get; set; }
|
||||
#else
|
||||
public string? Enabled { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("crc")]
|
||||
#if NET48
|
||||
public string CRC { get; set; }
|
||||
#else
|
||||
public string? CRC { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("source")]
|
||||
#if NET48
|
||||
public string Source { get; set; }
|
||||
#else
|
||||
public string? Source { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("cloneof")]
|
||||
#if NET48
|
||||
public string CloneOf { get; set; }
|
||||
#else
|
||||
public string? CloneOf { get; set; }
|
||||
#endif
|
||||
|
||||
[XmlElement("relatedto")]
|
||||
#if NET48
|
||||
public string RelatedTo { get; set; }
|
||||
#else
|
||||
public string? RelatedTo { get; set; }
|
||||
#endif
|
||||
|
||||
#region DO NOT USE IN PRODUCTION
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyAttribute]
|
||||
#if NET48
|
||||
public XmlAttribute[] ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#else
|
||||
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||
#endif
|
||||
|
||||
/// <remarks>Should be empty</remarks>
|
||||
[XmlAnyElement]
|
||||
#if NET48
|
||||
public object[] ADDITIONAL_ELEMENTS { get; set; }
|
||||
#else
|
||||
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCCH/Extended_Header#Access_Control_Info"/>
|
||||
public sealed class AccessControlInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// ARM11 local system capabilities
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ARM11LocalSystemCapabilities ARM11LocalSystemCapabilities { get; set; }
|
||||
#else
|
||||
public ARM11LocalSystemCapabilities? ARM11LocalSystemCapabilities { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// ARM11 kernel capabilities
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ARM11KernelCapabilities ARM11KernelCapabilities { get; set; }
|
||||
#else
|
||||
public ARM11KernelCapabilities? ARM11KernelCapabilities { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// ARM9 access control
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ARM9AccessControl ARM9AccessControl { get; set; }
|
||||
#else
|
||||
public ARM9AccessControl? ARM9AccessControl { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#Card_Info_Header"/>
|
||||
public sealed class CardInfoHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// CARD2: Writable Address In Media Units (For 'On-Chip' Savedata). CARD1: Always 0xFFFFFFFF.
|
||||
/// </summary>
|
||||
public uint WritableAddressMediaUnits { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Card Info Bitmask
|
||||
/// </summary>
|
||||
public uint CardInfoBitmask { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved1 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled size of cartridge
|
||||
/// </summary>
|
||||
public uint FilledSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved2 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved2 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Title version
|
||||
/// </summary>
|
||||
public ushort TitleVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Card revision
|
||||
/// </summary>
|
||||
public ushort CardRevision { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved3 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved3 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Title ID of CVer in included update partition
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] CVerTitleID { get; set; }
|
||||
#else
|
||||
public byte[]? CVerTitleID { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Version number of CVer in included update partition
|
||||
/// </summary>
|
||||
public ushort CVerVersionNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved4 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved4 { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#Development_Card_Info_Header_Extension"/>
|
||||
public sealed class DevelopmentCardInfoHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// InitialData
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public InitialData InitialData { get; set; }
|
||||
#else
|
||||
public InitialData? InitialData { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// CardDeviceReserved1
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] CardDeviceReserved1 { get; set; }
|
||||
#else
|
||||
public byte[]? CardDeviceReserved1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// TitleKey
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] TitleKey { get; set; }
|
||||
#else
|
||||
public byte[]? TitleKey { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// CardDeviceReserved2
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] CardDeviceReserved2 { get; set; }
|
||||
#else
|
||||
public byte[]? CardDeviceReserved2 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// TestData
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public TestData TestData { get; set; }
|
||||
#else
|
||||
public TestData? TestData { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#InitialData"/>
|
||||
public sealed class InitialData
|
||||
{
|
||||
/// <summary>
|
||||
/// Card seed keyY (first u64 is Media ID (same as first NCCH partitionId))
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] CardSeedKeyY { get; set; }
|
||||
#else
|
||||
public byte[]? CardSeedKeyY { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Encrypted card seed (AES-CCM, keyslot 0x3B for retail cards, see CTRCARD_SECSEED)
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] EncryptedCardSeed { get; set; }
|
||||
#else
|
||||
public byte[]? EncryptedCardSeed { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Card seed AES-MAC
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] CardSeedAESMAC { get; set; }
|
||||
#else
|
||||
public byte[]? CardSeedAESMAC { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Card seed nonce
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] CardSeedNonce { get; set; }
|
||||
#else
|
||||
public byte[]? CardSeedNonce { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved3
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Copy of first NCCH header (excluding RSA signature)
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public NCCHHeader BackupHeader { get; set; }
|
||||
#else
|
||||
public NCCHHeader? BackupHeader { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/CIA#Meta"/>
|
||||
public sealed class MetaData
|
||||
{
|
||||
/// <summary>
|
||||
/// Title ID dependency list - Taken from the application's ExHeader
|
||||
/// </summary>
|
||||
/// TODO: Determine numeric format of each entry
|
||||
#if NET48
|
||||
public byte[] TitleIDDependencyList { get; set; }
|
||||
#else
|
||||
public byte[]? TitleIDDependencyList { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved1 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Core Version
|
||||
/// </summary>
|
||||
public uint CoreVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved2 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved2 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Icon Data(.ICN) - Taken from the application's ExeFS
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] IconData { get; set; }
|
||||
#else
|
||||
public byte[]? IconData { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCCH/Extended_Header#System_Control_Info"/>
|
||||
public sealed class SystemControlInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Application title (default is "CtrApp")
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public string ApplicationTitle { get; set; }
|
||||
#else
|
||||
public string? ApplicationTitle { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved1 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved1 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Flag (bit 0: CompressExefsCode, bit 1: SDApplication)
|
||||
/// </summary>
|
||||
public byte Flag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Remaster version
|
||||
/// </summary>
|
||||
public ushort RemasterVersion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Text code set info
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public CodeSetInfo TextCodeSetInfo { get; set; }
|
||||
#else
|
||||
public CodeSetInfo? TextCodeSetInfo { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Stack size
|
||||
/// </summary>
|
||||
public uint StackSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Read-only code set info
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public CodeSetInfo ReadOnlyCodeSetInfo { get; set; }
|
||||
#else
|
||||
public CodeSetInfo? ReadOnlyCodeSetInfo { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Reserved
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Reserved2 { get; set; }
|
||||
#else
|
||||
public byte[]? Reserved2 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Data code set info
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public CodeSetInfo DataCodeSetInfo { get; set; }
|
||||
#else
|
||||
public CodeSetInfo? DataCodeSetInfo { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// BSS size
|
||||
/// </summary>
|
||||
public uint BSSSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dependency module (program ID) list
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ulong[] DependencyModuleList { get; set; }
|
||||
#else
|
||||
public ulong[]? DependencyModuleList { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// SystemInfo
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public SystemInfo SystemInfo { get; set; }
|
||||
#else
|
||||
public SystemInfo? SystemInfo { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
namespace SabreTools.Models.N3DS
|
||||
{
|
||||
/// <summary>
|
||||
/// The test data is the same one encountered in development DS/DSi cartridges.
|
||||
/// </summary>
|
||||
/// <see href="https://www.3dbrew.org/wiki/NCSD#TestData"/>
|
||||
public sealed class TestData
|
||||
{
|
||||
/// <summary>
|
||||
/// The bytes FF 00 FF 00 AA 55 AA 55.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Signature { get; set; }
|
||||
#else
|
||||
public byte[]? Signature { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// An ascending byte sequence equal to the offset mod 256 (08 09 0A ... FE FF 00 01 ... FF).
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] AscendingByteSequence { get; set; }
|
||||
#else
|
||||
public byte[]? AscendingByteSequence { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// A descending byte sequence equal to 255 minus the offset mod 256 (FF FE FD ... 00 FF DE ... 00).
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] DescendingByteSequence { get; set; }
|
||||
#else
|
||||
public byte[]? DescendingByteSequence { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled with 00 (0b00000000) bytes.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Filled00 { get; set; }
|
||||
#else
|
||||
public byte[]? Filled00 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled with FF (0b11111111) bytes.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] FilledFF { get; set; }
|
||||
#else
|
||||
public byte[]? FilledFF { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled with 0F (0b00001111) bytes.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Filled0F { get; set; }
|
||||
#else
|
||||
public byte[]? Filled0F { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled with F0 (0b11110000) bytes.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] FilledF0 { get; set; }
|
||||
#else
|
||||
public byte[]? FilledF0 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled with 55 (0b01010101) bytes.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] Filled55 { get; set; }
|
||||
#else
|
||||
public byte[]? Filled55 { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Filled with AA (0b10101010) bytes.
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public byte[] FilledAA { get; set; }
|
||||
#else
|
||||
public byte[]? FilledAA { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// The final byte is 00 (0b00000000).
|
||||
/// </summary>
|
||||
public byte FinalByte { get; set; }
|
||||
}
|
||||
}
|
||||
137
NCF/File.cs
137
NCF/File.cs
@@ -1,137 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SabreTools.Models.NCF
|
||||
{
|
||||
/// <summary>
|
||||
/// Half-Life No Cache File
|
||||
/// </summary>
|
||||
/// <see href="https://github.com/RavuAlHemio/hllib/blob/master/HLLib/NCFFile.h"/>
|
||||
public sealed class File
|
||||
{
|
||||
/// <summary>
|
||||
/// Header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Header Header { get; set; }
|
||||
#else
|
||||
public Header? Header { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DirectoryHeader DirectoryHeader { get; set; }
|
||||
#else
|
||||
public DirectoryHeader? DirectoryHeader { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DirectoryEntry[] DirectoryEntries { get; set; }
|
||||
#else
|
||||
public DirectoryEntry?[]? DirectoryEntries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory names data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public Dictionary<long, string> DirectoryNames { get; set; }
|
||||
#else
|
||||
public Dictionary<long, string?>? DirectoryNames { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory info 1 entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DirectoryInfo1Entry[] DirectoryInfo1Entries { get; set; }
|
||||
#else
|
||||
public DirectoryInfo1Entry?[]? DirectoryInfo1Entries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory info 2 entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DirectoryInfo2Entry[] DirectoryInfo2Entries { get; set; }
|
||||
#else
|
||||
public DirectoryInfo2Entry?[]? DirectoryInfo2Entries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory copy entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DirectoryCopyEntry[] DirectoryCopyEntries { get; set; }
|
||||
#else
|
||||
public DirectoryCopyEntry?[]? DirectoryCopyEntries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Directory local entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public DirectoryLocalEntry[] DirectoryLocalEntries { get; set; }
|
||||
#else
|
||||
public DirectoryLocalEntry?[]? DirectoryLocalEntries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Unknown header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public UnknownHeader UnknownHeader { get; set; }
|
||||
#else
|
||||
public UnknownHeader? UnknownHeader { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Unknown entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public UnknownEntry[] UnknownEntries { get; set; }
|
||||
#else
|
||||
public UnknownEntry?[]? UnknownEntries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Checksum header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ChecksumHeader ChecksumHeader { get; set; }
|
||||
#else
|
||||
public ChecksumHeader? ChecksumHeader { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Checksum map header data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ChecksumMapHeader ChecksumMapHeader { get; set; }
|
||||
#else
|
||||
public ChecksumMapHeader? ChecksumMapHeader { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Checksum map entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ChecksumMapEntry[] ChecksumMapEntries { get; set; }
|
||||
#else
|
||||
public ChecksumMapEntry?[]? ChecksumMapEntries { get; set; }
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Checksum entries data
|
||||
/// </summary>
|
||||
#if NET48
|
||||
public ChecksumEntry[] ChecksumEntries { get; set; }
|
||||
#else
|
||||
public ChecksumEntry?[]? ChecksumEntries { get; set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
namespace SabreTools.Models.NewExecutable
|
||||
{
|
||||
/// <see href="http://bytepointer.com/resources/win16_ne_exe_format_win3.0.htm"/>
|
||||
public sealed class ImportNameRelocationRecord
|
||||
{
|
||||
/// <summary>
|
||||
/// Index into module reference table for the imported module.
|
||||
/// </summary>
|
||||
public ushort Index { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Offset within Imported Names Table to procedure name string.
|
||||
/// </summary>
|
||||
public ushort Offset { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
namespace SabreTools.Models.NewExecutable
|
||||
{
|
||||
/// <see href="http://bytepointer.com/resources/win16_ne_exe_format_win3.0.htm"/>
|
||||
public sealed class ImportOrdinalRelocationRecord
|
||||
{
|
||||
/// <summary>
|
||||
/// Index into module reference table for the imported module.
|
||||
/// </summary>
|
||||
public ushort Index { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Procedure ordinal number.
|
||||
/// </summary>
|
||||
public ushort Ordinal { get; set; }
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user