285 Commits
1.1.2 ... 1.7.2

Author SHA1 Message Date
Matt Nadareski
0130a9caee Bump version 2025-09-22 17:26:04 -04:00
Matt Nadareski
da204f129f Remove unnecessary NoWarn 2025-09-22 17:22:32 -04:00
Matt Nadareski
945a62d1f2 Add COFF constants 2025-09-22 15:57:16 -04:00
Matt Nadareski
8ab5088607 Simplify naming in comments 2025-09-22 12:58:02 -04:00
Matt Nadareski
9e9fcac654 Move delay load table because it was missed 2025-09-22 12:39:44 -04:00
Matt Nadareski
76dac1025c Move TODO more out of the way 2025-09-22 12:38:03 -04:00
Matt Nadareski
0ec1cac7cf Remove TODO that was done 2025-09-22 12:36:01 -04:00
Matt Nadareski
6a0b97fdcd Remove meta-tables 2025-09-22 12:34:26 -04:00
Matt Nadareski
66f7adc49a Slightly change description on optional header 2025-09-22 12:19:06 -04:00
Matt Nadareski
4bc685ba23 Move TLS 2025-09-22 12:17:29 -04:00
Matt Nadareski
89ef827251 Move resource 2025-09-22 12:16:47 -04:00
Matt Nadareski
beb42b7e35 Move load configuration 2025-09-22 12:13:08 -04:00
Matt Nadareski
0502808962 This goes in resource entries 2025-09-22 12:07:26 -04:00
Matt Nadareski
e3411d3984 This is also import-related 2025-09-22 12:06:46 -04:00
Matt Nadareski
9d13cb01e3 Move import table 2025-09-22 12:06:05 -04:00
Matt Nadareski
649ea98a52 Move export table 2025-09-22 12:04:06 -04:00
Matt Nadareski
b90d7c5e9a Move debug data table 2025-09-22 12:01:12 -04:00
Matt Nadareski
9def156302 Move delay load directory table 2025-09-22 11:56:11 -04:00
Matt Nadareski
e1db4fc17b Move attribute certificate table 2025-09-22 11:52:28 -04:00
Matt Nadareski
ae4ad5c272 Optional header is partially COFF 2025-09-22 11:38:24 -04:00
Matt Nadareski
5bda523aec Sections are COFF, who knew? 2025-09-22 11:29:39 -04:00
Matt Nadareski
eda099d44e Separate out COFF stuff maybe for later? 2025-09-22 11:26:08 -04:00
Matt Nadareski
b5ac9304a4 Move base relocation to new namespace 2025-09-22 11:14:27 -04:00
Matt Nadareski
b40f84dd4b Move more things to resource entries namespace 2025-09-22 11:09:58 -04:00
Matt Nadareski
4a276fb65e Move MoPaQ encryption constants to IO 2025-09-22 10:37:40 -04:00
Matt Nadareski
973a94b340 Move LZX models to IO 2025-09-22 10:33:33 -04:00
Matt Nadareski
c6062f71eb Move Quantum compression models to IO 2025-09-22 10:29:29 -04:00
Matt Nadareski
fd7746fae3 Move MSZIP "model" to IO 2025-09-22 10:22:38 -04:00
Matt Nadareski
d3c6bdf23f Update Newtonsoft 2025-09-22 09:46:23 -04:00
Matt Nadareski
605a3bf30d Add a bunch of useful constants 2025-09-22 09:35:00 -04:00
Matt Nadareski
710ddc912d Add and update models needed for BOS 2025-09-22 09:06:33 -04:00
HeroponRikiBestest
2f94464b7d Small matroschka model update (#14)
* Small model updates, mainly documentation. Not essential.

* wrong branch lol
2025-09-19 12:09:16 -04:00
Matt Nadareski
b3d9bd3d6b Add some more hashes for fun 2025-09-19 08:29:49 -04:00
Matt Nadareski
c51c16ed2d Add RA extensions to Logiqx (fixes #13) 2025-09-17 09:29:29 -04:00
HeroponRikiBestest
978b6904db Add fileData variable to MatroshkaEntry.cs model (#12)
* Add fileData variable to MatroshkaEntry.cs model

This will be necessary to handle parsing properly in serialization.

* Use PascalCase
2025-09-16 15:30:47 -04:00
Matt Nadareski
d62bd2f60c Cleanup from last PR 2025-09-12 12:54:22 -04:00
Deterous
26f7f4d7da AACS2 support (#11)
* AACS2 support

* Better names

* libaacs links
2025-09-12 12:50:32 -04:00
Matt Nadareski
50a6f9ba89 There 2025-09-10 21:52:09 -04:00
Matt Nadareski
f07c11fb47 Simplify TLS directory 2025-09-09 13:54:19 -04:00
Matt Nadareski
dc47f64ee6 Sync a few notes from Serialization 2025-09-09 13:52:48 -04:00
Matt Nadareski
69006247a9 One more potential constant 2025-09-09 12:32:11 -04:00
Matt Nadareski
9c43b80502 Rename to be more accurate 2025-09-09 12:29:26 -04:00
Matt Nadareski
cbb7563724 Add missing symbol types, make a flag 2025-09-09 11:07:51 -04:00
Matt Nadareski
c7530884b3 Add constant notes 2025-09-09 09:42:55 -04:00
Matt Nadareski
e59c9205d4 Make OptionalHeader a bit more correct 2025-09-09 09:30:43 -04:00
Matt Nadareski
f5859638c2 Move these 2025-09-08 21:09:54 -04:00
Matt Nadareski
84d3740e73 Yeah 2025-09-08 21:07:25 -04:00
Matt Nadareski
517324ab58 Bump version 2025-09-05 09:10:29 -04:00
Matt Nadareski
a02c037995 Remind myself of this 2025-09-02 19:20:59 -04:00
Matt Nadareski
a1890e1fe6 I messed this up too 2025-09-01 16:17:02 -04:00
Matt Nadareski
32c6633788 Fix this naming for later 2025-09-01 15:52:50 -04:00
Matt Nadareski
81b53c9785 Bump version 2025-09-01 15:05:53 -04:00
Matt Nadareski
54c05f2746 Sync changes from downstream 2025-09-01 15:05:15 -04:00
Matt Nadareski
4a4d7ceddf Make this more clear 2025-08-28 23:37:18 -04:00
Matt Nadareski
0f029c5979 Fix one 2025-08-28 21:29:23 -04:00
Matt Nadareski
bb4fee91d9 Sort some things around PE 2025-08-28 21:18:39 -04:00
Matt Nadareski
ed56e2543d Convert this to an array 2025-08-28 12:12:04 -04:00
Matt Nadareski
d675673e50 More descriptive names 2025-08-28 09:47:01 -04:00
Matt Nadareski
ebee967c7f Clean up gzip and tar a bit 2025-08-28 09:27:08 -04:00
Matt Nadareski
f5da54eaac Fix some tar model issues 2025-08-28 08:56:11 -04:00
Matt Nadareski
2350c1af27 Add placeholder models 2025-08-28 07:46:23 -04:00
Matt Nadareski
454d507b41 Source my sources 2025-08-28 07:40:09 -04:00
Matt Nadareski
10de4acbb9 File ending thing for PKZIP 2025-08-28 07:38:11 -04:00
Matt Nadareski
8ec91d8d04 Add a couple missing extra field structures 2025-08-27 22:28:06 -04:00
Matt Nadareski
1d62d69a53 Interleaved types don't need to be here 2025-08-27 22:09:28 -04:00
Matt Nadareski
5b5fed8932 Rename a few things 2025-08-27 21:09:30 -04:00
Matt Nadareski
32123d4b80 Fix one more PKZIP extra field 2025-08-27 20:40:32 -04:00
Matt Nadareski
f5717c3929 Forgot to sync change here 2025-08-27 19:19:36 -04:00
Matt Nadareski
e8db261d73 Start making some fixes to PKZIP 2025-08-27 19:14:31 -04:00
Matt Nadareski
9557f43dab Add placeholder extras field 2025-08-27 18:43:26 -04:00
Matt Nadareski
51b9c1a016 Make PKZIP models a bit easier to follow 2025-08-27 12:51:57 -04:00
Matt Nadareski
bb3cd54865 Remove now-useless note 2025-08-15 10:13:31 -04:00
Matt Nadareski
0c6060a901 Clickable sources, archive links for dead pages 2025-08-15 10:09:43 -04:00
Matt Nadareski
c18770f627 Upstream changes from WiseUnpacker 2025-08-15 08:59:29 -04:00
Matt Nadareski
c2a5d6770c Upstream changes from WiseUnpacker 2025-08-13 12:22:11 -04:00
Matt Nadareski
4ef79ccdca Upstream changes from WiseUnpacker 2025-08-10 21:44:23 -04:00
Matt Nadareski
cf5135f330 Slight NE cleanup 2025-08-10 20:36:53 -04:00
Matt Nadareski
6d989209db Update NE notes and structure a bit more 2025-08-10 20:15:49 -04:00
Matt Nadareski
cc48593646 Upstream changes from WiseUnpacker 2025-08-09 10:26:37 -04:00
Matt Nadareski
415d571b65 Upstream changes from WiseUnpacker 2025-08-06 09:33:51 -04:00
Matt Nadareski
4a6e244b38 Upstream changes from WiseUnpacker 2025-08-04 12:16:34 -04:00
Matt Nadareski
771a39517f Upstream changes from WiseUnpacker 2025-08-01 16:06:32 -04:00
Matt Nadareski
b072a3809c Fix enum 2025-08-01 10:32:17 -04:00
Matt Nadareski
341585206a Add Wise Installer models from REWise
All credit to CYBERDEV for their work in documenting these structures in the first place
2025-07-31 22:35:04 -04:00
Matt Nadareski
2dc2ab5dd1 Add OLE models 2025-07-30 22:46:37 -04:00
Matt Nadareski
144a3ce52b Fix CFB comments 2025-07-29 22:45:15 -04:00
Matt Nadareski
85199789f7 Add new Matroshka package comment 2025-07-28 07:54:29 -04:00
Matt Nadareski
fb39216c82 Bump verison 2025-07-24 09:11:34 -04:00
Matt Nadareski
1a2de39868 Fix Dir serialization issue 2025-07-24 09:11:10 -04:00
Matt Nadareski
f18b6c8850 Bump version 2025-07-23 09:48:18 -04:00
Matt Nadareski
8f1e49e464 Add .NET Standard 2.0 and 2.1 2025-07-23 09:43:12 -04:00
Matt Nadareski
6547242f93 Clean up more Matroskha comments 2025-07-21 11:27:20 -04:00
Matt Nadareski
edf00f3ab2 Add analysis block comment 2025-07-21 11:25:18 -04:00
Matt Nadareski
bce4736037 Clean up more Matroskha comments 2025-07-21 11:23:25 -04:00
Matt Nadareski
81f28974c0 More remark corrections based on more samples 2025-07-21 11:10:35 -04:00
Matt Nadareski
30ebe84af4 Remove disproven theory 2025-07-21 11:08:01 -04:00
Matt Nadareski
b07fbdedd6 Add secondary length note 2025-07-21 09:39:31 -04:00
Matt Nadareski
cd8fff4a86 Slight tweaks to Matroska entry notes 2025-07-21 09:21:56 -04:00
Matt Nadareski
3d3275e3cb Add SecuROM Matroshka models
All research thanks to HeroponRikiBestest
2025-07-21 09:11:37 -04:00
Matt Nadareski
4c76ce1230 Add SecuROM DFA models
All research thanks to HeroponRikiBestest
2025-07-21 08:10:25 -04:00
Matt Nadareski
0c4e3b4bf2 Dirs can be nested 2025-06-24 12:32:14 -04:00
Matt Nadareski
e8f4386199 Add mess alternative ListXML model 2025-05-28 09:53:05 -04:00
Matt Nadareski
ab66ccf3c5 Update copyright 2024-12-30 21:19:05 -05:00
Matt Nadareski
cc60d54a33 Remove unnecessary action step 2024-12-30 21:18:59 -05:00
Matt Nadareski
e805f4cb9a Ensure .NET versions are installed for testing 2024-12-19 10:50:01 -05:00
Matt Nadareski
328c893a38 Ensure .NET versions are installed for testing 2024-12-19 10:45:08 -05:00
Matt Nadareski
ab2a12c996 Bump version 2024-12-16 12:10:13 -05:00
Matt Nadareski
362b123661 Allow symbols to be packed 2024-12-16 11:37:18 -05:00
Matt Nadareski
4a8a4746a2 Add big-endian note for PS4 PKG 2024-12-16 11:31:38 -05:00
Deterous
3f368a3be8 Create model for PS4 app.pkg header (#7)
* Create model for PS4 app.pkg header

* Rename PS4 app.pkg class

* Fix typo

* Requested changes

* Add newline
2024-12-15 20:12:06 -05:00
Matt Nadareski
2749c2f5bd Bump version 2024-12-11 11:25:41 -05:00
Matt Nadareski
41ce962700 Reorder LZ constants 2024-12-11 11:10:01 -05:00
Matt Nadareski
85b7103bd3 Re-rename Expand to SZDD for consistency 2024-12-11 11:09:28 -05:00
Matt Nadareski
4c61a191e8 Remove MS-ZIP Block type 2024-12-11 11:00:44 -05:00
Matt Nadareski
0f70598969 Add LZ prefixes for easier checking 2024-12-11 10:58:47 -05:00
Matt Nadareski
d6b057d808 Move LZ models out of Compression namespace 2024-12-11 10:54:10 -05:00
Matt Nadareski
3d8036e7b5 Remove things that Compression doesn't need anymore 2024-12-11 10:46:28 -05:00
Matt Nadareski
bb35946866 Ensure KWAJ header flags serialized 2024-12-11 04:19:02 -05:00
Matt Nadareski
78f9f1b36f Fix KWAJ serialization 2024-12-11 04:16:23 -05:00
Matt Nadareski
9d1b1ca36d Further simplify LZ models 2024-12-11 03:48:10 -05:00
Matt Nadareski
6e1f8bf55e Fix issues with MS-LZ models 2024-12-11 01:50:02 -05:00
Matt Nadareski
a19afc240c Bump version 2024-12-10 15:28:49 -05:00
Matt Nadareski
148e97ef64 Add now-supported DOSCenter SHA-1 attribute 2024-12-07 23:28:52 -05:00
Matt Nadareski
676b446025 Add badge for build status 2024-12-06 10:48:43 -05:00
Matt Nadareski
aeff75d8d3 Rename workflow file, add releases to README 2024-12-06 10:47:42 -05:00
Matt Nadareski
e20e515f56 Attempt to use publish script 2024-12-06 10:43:08 -05:00
Matt Nadareski
bf02266f0f Bump version 2024-11-29 19:51:47 -05:00
Matt Nadareski
b521e503c2 Rearrange SGA 2024-11-28 20:26:58 -05:00
Matt Nadareski
48e79d26ed Ensure nullable arrays are correct 2024-11-27 23:37:25 -05:00
Matt Nadareski
989ef41c6d Get/Set may be fully disallowed? 2024-11-27 21:31:33 -05:00
Matt Nadareski
6b0c4c3024 Bump version 2024-11-27 21:15:05 -05:00
Matt Nadareski
4b54d0f4dc Fix build 2024-11-27 21:09:01 -05:00
Matt Nadareski
2bc1cfc5d0 Cleanup from issues in Serialization 2024-11-27 21:03:50 -05:00
Matt Nadareski
362abfdc64 Remove layout from CopyrightRecord 2024-11-27 10:38:58 -05:00
Matt Nadareski
a06ff8f8b3 Bump version 2024-11-20 14:03:14 -05:00
Matt Nadareski
7269e91913 Partially add VBSP lump 40 2024-11-19 14:34:32 -05:00
Matt Nadareski
c118271565 Add VBSP lump 29 2024-11-19 14:30:54 -05:00
Matt Nadareski
71ccbc6ab1 Fix issues found during Serialization update 2024-11-19 12:47:09 -05:00
Matt Nadareski
ed5c1a7173 Use array-of-array instead of multidimensional array 2024-11-18 23:35:47 -05:00
Matt Nadareski
0451af3eb4 Bump version 2024-11-18 20:37:56 -05:00
Matt Nadareski
7967eb29eb Move Deflate constants to new file 2024-11-18 12:09:48 -05:00
Matt Nadareski
6bbe904cc3 Move Deflate-specific models to separate namespace 2024-11-18 10:04:45 -05:00
Matt Nadareski
dce9d98885 Add GZIP models 2024-11-18 02:45:07 -05:00
Matt Nadareski
f862e018fb Update VPK models 2024-11-18 02:13:52 -05:00
Matt Nadareski
b4a5154da8 Update VBSP models 2024-11-18 01:59:46 -05:00
Matt Nadareski
077aa3c57e Update BSP models 2024-11-17 21:20:50 -05:00
Matt Nadareski
ea8630ba8c Update WAD3 models 2024-11-17 19:56:59 -05:00
Matt Nadareski
385491c67b Framework only matters for executable 2024-11-15 20:16:03 -05:00
Matt Nadareski
f57461e0c3 Make obsolete types NoWarn instead of ignore 2024-11-15 20:10:16 -05:00
Matt Nadareski
18f49ac43f It was correct 2024-11-14 11:19:21 -05:00
Matt Nadareski
28fd81adab Minor tweaks 2024-11-13 23:12:37 -05:00
Matt Nadareski
ecca68822d Bump version 2024-11-13 20:33:38 -05:00
Matt Nadareski
58c2dcbe4f Fix duplicate data bug in N3DS cart data 2024-11-13 17:03:57 -05:00
Matt Nadareski
f9b8717abb Add .NET 9 to target frameworks 2024-11-13 00:33:49 -05:00
Matt Nadareski
6a356a5874 Add .NET 9 to target frameworks 2024-11-13 00:19:00 -05:00
Matt Nadareski
88c6a0302f Add .NET 9 to target frameworks 2024-11-13 00:16:28 -05:00
Matt Nadareski
5282db965f Bump version 2024-11-13 00:12:59 -05:00
Matt Nadareski
33217a7efe Remove "overflow" fields finally 2024-11-13 00:09:20 -05:00
Matt Nadareski
c8583589d6 Add .NET 9 to target frameworks 2024-11-12 23:58:35 -05:00
Matt Nadareski
6ed2b406d7 Add .NET 9 to target frameworks 2024-11-12 23:57:23 -05:00
Matt Nadareski
4b08e0f5dd Add keys to Rom for MD2/4 2024-11-12 12:41:39 -05:00
Matt Nadareski
e8259fed12 Add placeholders to main hashfile 2024-11-12 12:40:17 -05:00
Matt Nadareski
d06df28f72 Add placeholder models for MD2/MD4 2024-11-12 12:39:38 -05:00
Matt Nadareski
f73ff87922 Make CHD headers (mostly) serializable 2024-11-12 12:31:23 -05:00
Matt Nadareski
dd6b79a21b Use collection expressions 2024-11-12 12:23:47 -05:00
Matt Nadareski
d3daa2c4aa Add GameHeader models 2024-11-04 13:45:05 -05:00
Matt Nadareski
1620d00edf Technically use CodecType 2024-10-31 13:42:37 -04:00
Matt Nadareski
5565fa2fc3 Bump version 2024-10-31 11:08:14 -04:00
Matt Nadareski
e088e203ea Tags are tags, use them 2024-10-31 00:26:46 -04:00
Matt Nadareski
acc8d95930 Correctly redefine const as enum 2024-10-31 00:15:43 -04:00
Matt Nadareski
1a76c59827 Port significantly more CHD info 2024-10-31 00:05:19 -04:00
Matt Nadareski
8725ec0337 Port more CHD info from SabreTools 2024-10-19 23:58:56 -04:00
Matt Nadareski
8991cc460d Correct info for IS-CAB components 2024-10-03 02:49:47 -04:00
Matt Nadareski
98ce8b65ec Correct info for IS-CAB file groups 2024-10-03 02:35:15 -04:00
Matt Nadareski
ca58343c30 Bump version 2024-10-01 12:32:33 -04:00
Matt Nadareski
2f637e0012 Remove ValueTuple requirement 2024-10-01 01:41:43 -04:00
Matt Nadareski
80172942fd Mark extended TAR header info 2024-09-26 14:08:55 -04:00
Matt Nadareski
aa0960b42f Separate entry from archive in TAR 2024-09-26 13:45:49 -04:00
Matt Nadareski
2554f64277 Add layout for TAR header 2024-09-26 12:15:59 -04:00
Matt Nadareski
4c5c960915 Slight tweak to TAR header (nw) 2024-09-26 12:03:20 -04:00
Matt Nadareski
1cb49163dd Upate MinValueTupleBridge to 0.2.1 2024-09-25 10:46:16 -04:00
Matt Nadareski
d144dd47a1 Bump version 2024-08-08 14:19:26 -04:00
Matt Nadareski
c4247c7ccb Move readme back to where it should be 2024-08-08 14:16:26 -04:00
Matt Nadareski
1e77437167 Fixup csproj a bit 2024-08-08 14:15:30 -04:00
Matt Nadareski
3d79e07d76 Move project to subfolder 2024-08-08 14:11:45 -04:00
Matt Nadareski
9d50d577ab Fix things found during NDecrypt usage 2024-08-08 13:18:47 -04:00
Matt Nadareski
494ca175fb Fix layout of ISv3 directory 2024-06-03 11:57:30 -04:00
Matt Nadareski
73b3d4a7a8 Bump version 2024-05-15 14:09:49 -04:00
Matt Nadareski
bd40158423 Forgot to check... 2024-05-15 14:08:14 -04:00
Matt Nadareski
149a45d871 Bump version 2024-05-15 14:00:54 -04:00
Matt Nadareski
e18d8d7543 Fix menu header parsing/serialization 2024-05-15 14:00:30 -04:00
Matt Nadareski
38f0d4aef5 Bump version 2024-05-13 13:18:47 -04:00
Matt Nadareski
3959993255 Fix XMID/XeMID comments 2024-05-09 21:40:43 -04:00
Matt Nadareski
00df5bdd6e UTF-8 treated like ASCII for old .NET 2024-05-07 05:28:46 -04:00
Matt Nadareski
00c087d8e0 Add third-party expansion fields for PKZIP 2024-04-28 02:30:46 -04:00
Matt Nadareski
6bc948784a Add PKZIP appendix A and B 2024-04-28 02:02:58 -04:00
Matt Nadareski
c4f14854c2 Add extensible data field definitions 2024-04-28 01:11:27 -04:00
Matt Nadareski
adaac68898 Bump version 2024-04-24 10:04:06 -04:00
Matt Nadareski
a9bc4a2bfe Fix getopts 2024-04-24 01:35:59 -04:00
Matt Nadareski
262b91de65 32 unicode characters, 64 bytes 2024-04-24 01:25:30 -04:00
Matt Nadareski
62bd6a4bde Add a couple of constants from UnshieldSharp 2024-04-24 00:36:41 -04:00
Matt Nadareski
7f14f0c5b0 Fix encoding for DirectoryEntry 2024-04-23 21:43:17 -04:00
Matt Nadareski
33d63fddae Bump version 2024-04-23 21:01:52 -04:00
Matt Nadareski
209be57bf4 Add layouts for some BD+ models 2024-04-23 20:59:47 -04:00
Matt Nadareski
a1581e9d9b Add layouts for some BFPK models 2024-04-23 20:58:51 -04:00
Matt Nadareski
521664d5a8 Add layouts for some BSP models 2024-04-23 20:57:24 -04:00
Matt Nadareski
73a8d91a83 Add layouts for some CFB models 2024-04-23 20:55:10 -04:00
Matt Nadareski
438e87f833 Add layouts for some CHD models 2024-04-23 20:50:09 -04:00
Matt Nadareski
2cdedbb456 Add layouts for some DVD models 2024-04-23 20:47:33 -04:00
Matt Nadareski
b57a545598 Add layouts for some GCF models 2024-04-23 20:38:11 -04:00
Matt Nadareski
8dc6eb2eee Add layouts for some IS-CAB models 2024-04-23 20:26:18 -04:00
Matt Nadareski
b58436d71a Add layouts for some MoPaQ models 2024-04-23 20:18:26 -04:00
Matt Nadareski
925c20021f Add layouts for some MSDOS models 2024-04-23 20:13:07 -04:00
Matt Nadareski
9bebf95599 Add layouts for some N3DS models 2024-04-23 20:09:39 -04:00
Matt Nadareski
089e13ca03 Add layouts for some NCF models 2024-04-23 19:34:56 -04:00
Matt Nadareski
de07b3b0dd Make some types non-nullable 2024-04-23 19:13:47 -04:00
Matt Nadareski
22cb5360e6 Add notes about prefixed strings 2024-04-23 17:20:05 -04:00
Matt Nadareski
a422ec7e6d Add layouts for some Nitro models 2024-04-23 17:15:15 -04:00
Matt Nadareski
f60afd6368 Add layouts for some PE models 2024-04-23 16:42:29 -04:00
Matt Nadareski
b8f67a8ab0 Add layouts for some VBSP models 2024-04-23 16:06:09 -04:00
Matt Nadareski
d844a8b582 Add layouts for some VPK models 2024-04-23 16:03:20 -04:00
Matt Nadareski
8583baa862 Add layouts for some WAD models 2024-04-23 15:56:43 -04:00
Matt Nadareski
8f3be17850 Add layouts for some XZP models 2024-04-23 15:49:41 -04:00
Matt Nadareski
5856967794 Fill and fix some ISAv3 information 2024-04-23 15:43:33 -04:00
Matt Nadareski
8f78c73c6f Fix publish scripts 2024-04-23 14:12:10 -04:00
Matt Nadareski
af4ff3d383 Bump version 2024-04-23 14:10:58 -04:00
Matt Nadareski
3e638a5c57 Make Linux publish script executable 2024-04-23 14:10:27 -04:00
Matt Nadareski
638d0226c1 Add publish scripts 2024-04-23 14:10:03 -04:00
Matt Nadareski
07c6d5b43a Obsolete is not an error... for now 2024-04-23 13:38:37 -04:00
Matt Nadareski
108e63a099 Add some null-terminated type flags 2024-04-23 13:36:24 -04:00
Matt Nadareski
c636d3252b Migrate many models to StructLayout 2024-04-23 13:30:43 -04:00
Matt Nadareski
b19dbf2254 Update APPNOTE link, add more Header IDs 2024-04-17 16:43:02 -04:00
Matt Nadareski
111b84170c Add relevant information to PKZIP archive 2024-04-17 16:09:30 -04:00
Matt Nadareski
2d7df0d4fb Add PKZIP archive model 2024-04-17 15:59:56 -04:00
Matt Nadareski
aba02663e5 Start adding PKZIP models 2024-04-17 15:47:41 -04:00
Matt Nadareski
594fec923a Bump version 2024-04-03 22:44:18 -04:00
Deterous
b5cf4e870d Add fields for v1.0 catalog.js files (#6) 2024-04-03 19:43:17 -07:00
Matt Nadareski
e6976796c2 Initial attempt at Delphi models 2024-04-02 10:58:20 -04:00
Deterous
295d8c7612 XboxOne/XboxSX catalog.js Model (#5)
* XboxOne catalog.js model

* Split Catalog object, bump version

* Minor fixes

* Custom JsonConverter for launchPackage

* Make launchPackage an abstract object

* Don't ignore packages

* Fix field types for Catalog/Package
2024-04-02 07:54:57 -07:00
Matt Nadareski
4dd184583c Revert XML tag for OfflineList duplicate ID 2024-03-19 15:30:45 -04:00
Matt Nadareski
081c9c9245 Bump version 2024-03-12 16:21:06 -04:00
Matt Nadareski
b974380ccf Fix SoftwareList.Disk field name 2024-03-12 15:28:58 -04:00
Matt Nadareski
41ed2cbc9a Fix XML element name for duplicateId 2024-03-12 00:07:47 -04:00
Matt Nadareski
2cfcb49e35 Fix missing OfflineList field 2024-03-11 23:35:22 -04:00
Matt Nadareski
b3f3f12b3e Use "main" instead of "master" 2024-02-27 19:06:26 -05:00
Matt Nadareski
b41700ff92 Update copyright date 2024-02-27 17:18:02 -05:00
Matt Nadareski
e8a357546b Add nuget package and PR workflows 2024-02-27 17:17:50 -05:00
Matt Nadareski
68f0201c11 Add SafeDisc encrypted file entry model 2023-11-30 19:11:52 -05:00
Matt Nadareski
25b6493249 Bump version 2023-11-21 11:15:24 -05:00
Matt Nadareski
a551363c0b Support .NET Framework 2.0 2023-11-20 23:44:05 -05:00
Matt Nadareski
2fd92aea8f Support .NET Framework 3.5 2023-11-20 21:10:43 -05:00
Matt Nadareski
a61b3d0ed9 Add IS Archive V3 models 2023-11-15 14:30:25 -05:00
Matt Nadareski
a40a6871df Bump version 2023-11-14 12:30:15 -05:00
Matt Nadareski
5792ec64c0 Cut off at .NET Framework 4.0 2023-11-08 10:45:12 -05:00
Matt Nadareski
3b13c7cc96 Cut off at .NET Framework 4.0 2023-11-08 10:44:47 -05:00
Matt Nadareski
894d7b62e2 Enable warnings as errors 2023-11-07 21:52:01 -05:00
Matt Nadareski
38e37b1a63 Support ancient .NET 2023-11-07 21:18:17 -05:00
Matt Nadareski
1f340bd244 Remove framework gating 2023-11-07 20:57:05 -05:00
Matt Nadareski
e582ce8726 Enable latest language version 2023-11-07 20:48:49 -05:00
Matt Nadareski
dad71add36 Expand supported RIDs 2023-11-07 20:47:31 -05:00
Matt Nadareski
cb2a28016e Enable broader support 2023-11-07 20:46:11 -05:00
Matt Nadareski
46a814ac73 Add PS3 SFB and SFO models 2023-11-03 15:18:26 -04:00
Matt Nadareski
8fabe9c02d Rename IRD to File internally 2023-10-29 21:53:12 -04:00
Matt Nadareski
21e22a1476 Bump version 2023-10-25 12:36:33 -04:00
Matt Nadareski
016057a837 Add mapping dictionaries for Xbox 2023-10-24 22:48:41 -04:00
Matt Nadareski
69ca889ac7 Add version guards around LZX.Chunk 2023-10-24 21:45:32 -04:00
Matt Nadareski
cd67a7282b Add version guards to IRD model 2023-10-23 11:33:50 -04:00
Matt Nadareski
948edbad58 Merge pull request #4 from Deterous/Deterous-patch-1
Improve IRD Model
2023-10-23 10:54:21 -04:00
Deterous
d445f02ba6 Specify the reserved attributes 2023-10-23 12:23:55 +13:00
Deterous
835fce7876 Comment on UID 2023-10-23 12:00:05 +13:00
Deterous
97513840e0 ID and UID are the same Property 2023-10-23 11:53:34 +13:00
Matt Nadareski
6112dcb391 Add IRD model 2023-10-22 01:03:34 -04:00
Matt Nadareski
c000e581c8 Bump version 2023-09-28 23:24:58 -04:00
Matt Nadareski
465cef4224 Add XGD4 identifier for PIC 2023-09-28 23:21:44 -04:00
Matt Nadareski
87cadbfd2b Add documentation around Quantum 2023-09-22 21:24:05 -04:00
Matt Nadareski
648ee2eaa5 Add back two properties 2023-09-22 21:15:52 -04:00
Matt Nadareski
daa814728d Simplify the Quantum models for now 2023-09-22 21:13:31 -04:00
Matt Nadareski
68aac36623 Fully create Chunk and ChunkHeader 2023-09-22 21:00:41 -04:00
Matt Nadareski
0c95cfcde4 More LZX cleanup 2023-09-22 20:47:29 -04:00
Matt Nadareski
6d6361c153 Start making LZX models better 2023-09-22 20:40:22 -04:00
Matt Nadareski
e4be402052 Bump version 2023-09-22 16:02:57 -04:00
Matt Nadareski
182c9bc756 Add remark on DeflateBlock 2023-09-22 15:37:49 -04:00
Matt Nadareski
cc62b3ffae This is an array 2023-09-22 15:34:55 -04:00
Matt Nadareski
7d34f486cd Make the MSZIP models better 2023-09-22 15:32:19 -04:00
Matt Nadareski
9c68cfc0c1 Fix issues found during MSZIP research 2023-09-22 11:54:48 -04:00
1065 changed files with 24559 additions and 16959 deletions

40
.github/workflows/build_and_test.yml vendored Normal file
View 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
View 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

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

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

View File

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

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -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
}
}

View File

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

View File

@@ -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 */
}
}

View File

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

View File

@@ -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
*/
}
}

View File

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

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

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

View File

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

View File

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

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

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

View File

@@ -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
View 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.

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

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

View File

@@ -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
}
}

View File

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

View File

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