50 Commits

Author SHA1 Message Date
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
694 changed files with 4214 additions and 1700 deletions

View File

@@ -28,13 +28,13 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: 'Nuget Package'
path: 'bin/Release/*.nupkg'
path: 'SabreTools.Models/bin/Release/*.nupkg'
- name: Upload to rolling
uses: ncipollo/release-action@v1.14.0
with:
allowUpdates: True
artifacts: 'bin/Release/*.nupkg'
artifacts: 'SabreTools.Models/bin/Release/*.nupkg'
body: 'Last built commit: ${{ github.sha }}'
name: 'Rolling Release'
prerelease: True

View File

@@ -1,14 +0,0 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.InstallShieldArchiveV3
{
/// <see href="https://github.com/wfr/unshieldv3/blob/master/ISArchiveV3.cpp"/>
[StructLayout(LayoutKind.Sequential)]
public class Directory
{
[MarshalAs(UnmanagedType.BStr)]
public string? Name;
public ushort FileCount;
}
}

View File

@@ -1,61 +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>
public byte[]? Reserved1 { get; set; }
/// <summary>
/// Filled size of cartridge
/// </summary>
public uint FilledSize { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved2 { get; set; }
/// <summary>
/// Title version
/// </summary>
public ushort TitleVersion { get; set; }
/// <summary>
/// Card revision
/// </summary>
public ushort CardRevision { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved3 { get; set; }
/// <summary>
/// Title ID of CVer in included update partition
/// </summary>
public byte[]? CVerTitleID { get; set; }
/// <summary>
/// Version number of CVer in included update partition
/// </summary>
public ushort CVerVersionNumber { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved4 { get; set; }
}
}

View File

@@ -1,31 +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>
public InitialData? InitialData { get; set; }
/// <summary>
/// CardDeviceReserved1
/// </summary>
public byte[]? CardDeviceReserved1 { get; set; }
/// <summary>
/// TitleKey
/// </summary>
public byte[]? TitleKey { get; set; }
/// <summary>
/// CardDeviceReserved2
/// </summary>
public byte[]? CardDeviceReserved2 { get; set; }
/// <summary>
/// TestData
/// </summary>
public TestData? TestData { get; set; }
}
}

View File

@@ -1,36 +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>
public byte[]? CardSeedKeyY { get; set; }
/// <summary>
/// Encrypted card seed (AES-CCM, keyslot 0x3B for retail cards, see CTRCARD_SECSEED)
/// </summary>
public byte[]? EncryptedCardSeed { get; set; }
/// <summary>
/// Card seed AES-MAC
/// </summary>
public byte[]? CardSeedAESMAC { get; set; }
/// <summary>
/// Card seed nonce
/// </summary>
public byte[]? CardSeedNonce { get; set; }
/// <summary>
/// Reserved3
/// </summary>
public byte[]? Reserved { get; set; }
/// <summary>
/// Copy of first NCCH header (excluding RSA signature)
/// </summary>
public NCCHHeader? BackupHeader { get; set; }
}
}

View File

@@ -1,32 +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
public byte[]? TitleIDDependencyList { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved1 { get; set; }
/// <summary>
/// Core Version
/// </summary>
public uint CoreVersion { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved2 { get; set; }
/// <summary>
/// Icon Data(.ICN) - Taken from the application's ExeFS
/// </summary>
public byte[]? IconData { get; set; }
}
}

View File

@@ -1,59 +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>
public byte[]? Signature { get; set; }
/// <summary>
/// An ascending byte sequence equal to the offset mod 256 (08 09 0A ... FE FF 00 01 ... FF).
/// </summary>
public byte[]? AscendingByteSequence { get; set; }
/// <summary>
/// A descending byte sequence equal to 255 minus the offset mod 256 (FF FE FD ... 00 FF DE ... 00).
/// </summary>
public byte[]? DescendingByteSequence { get; set; }
/// <summary>
/// Filled with 00 (0b00000000) bytes.
/// </summary>
public byte[]? Filled00 { get; set; }
/// <summary>
/// Filled with FF (0b11111111) bytes.
/// </summary>
public byte[]? FilledFF { get; set; }
/// <summary>
/// Filled with 0F (0b00001111) bytes.
/// </summary>
public byte[]? Filled0F { get; set; }
/// <summary>
/// Filled with F0 (0b11110000) bytes.
/// </summary>
public byte[]? FilledF0 { get; set; }
/// <summary>
/// Filled with 55 (0b01010101) bytes.
/// </summary>
public byte[]? Filled55 { get; set; }
/// <summary>
/// Filled with AA (0b10101010) bytes.
/// </summary>
public byte[]? FilledAA { get; set; }
/// <summary>
/// The final byte is 00 (0b00000000).
/// </summary>
public byte FinalByte { get; set; }
}
}

View File

@@ -1,719 +0,0 @@
using System;
/// <see href="https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT"/>
namespace SabreTools.Models.PKZIP
{
public enum CompressionMethod : ushort
{
/// <summary>
/// The file is stored (no compression)
/// </summary>
Stored = 0,
/// <summary>
/// The file is Shrunk
/// </summary>
Shrunk = 1,
/// <summary>
/// The file is Reduced with compression factor 1
/// </summary>
ReducedCompressionFactor1 = 2,
/// <summary>
/// The file is Reduced with compression factor 2
/// </summary>
ReducedCompressionFactor2 = 3,
/// <summary>
/// The file is Reduced with compression factor 3
/// </summary>
ReducedCompressionFactor3 = 4,
/// <summary>
/// The file is Reduced with compression factor 4
/// </summary>
ReducedCompressionFactor4 = 5,
/// <summary>
/// The file is Imploded
/// </summary>
Implode = 6,
/// <summary>
/// Reserved for Tokenizing compression algorithm
/// </summary>
TokenizingCompressionAlgorithm = 7,
/// <summary>
/// The file is Deflated
/// </summary>
Deflate = 8,
/// <summary>
/// Enhanced Deflating using Deflate64(tm)
/// </summary>
Deflate64 = 9,
/// <summary>
/// PKWARE Data Compression Library Imploding (old IBM TERSE)
/// </summary>
PKWAREDataCompressionLibraryImplode = 10,
/// <summary>
/// Reserved by PKWARE
/// </summary>
CompressionMethod11 = 11,
/// <summary>
/// File is compressed using BZIP2 algorithm
/// </summary>
BZIP2 = 12,
/// <summary>
/// Reserved by PKWARE
/// </summary>
CompressionMethod13 = 13,
/// <summary>
/// LZMA
/// </summary>
LZMA = 14,
/// <summary>
/// Reserved by PKWARE
/// </summary>
CompressionMethod15 = 15,
/// <summary>
/// IBM z/OS CMPSC Compression
/// </summary>
IBMzOSCMPSC = 16,
/// <summary>
/// Reserved by PKWARE
/// </summary>
CompressionMethod17 = 17,
/// <summary>
/// File is compressed using IBM TERSE (new)
/// </summary>
IBMTERSE = 18,
/// <summary>
/// IBM LZ77 z Architecture
/// </summary>
IBMLZ77 = 19,
/// <summary>
/// deprecated (use method 93 for zstd)
/// </summary>
[Obsolete]
OldZstandard = 20,
/// <summary>
/// Zstandard (zstd) Compression
/// </summary>
Zstandard = 93,
/// <summary>
/// MP3 Compression
/// </summary>
MP3 = 94,
/// <summary>
/// XZ Compression
/// </summary>
XZ = 95,
/// <summary>
/// JPEG variant
/// </summary>
JPEGVariant = 96,
/// <summary>
/// WavPack compressed data
/// </summary>
WavPack = 97,
/// <summary>
/// PPMd version I, Rev 1
/// </summary>
PPMdVersionIRev1 = 98,
/// <summary>
/// AE-x encryption marker
/// </summary>
AExEncryption = 99,
}
[Flags]
public enum GeneralPurposeBitFlags : ushort
{
/// <summary>
/// Indicates that the file is encrypted
/// </summary>
FileEncrypted = 0b0000_0000_0000_0001,
#region Compression Method 6 (Implode)
/// <summary>
/// Set - 8K sliding dictionary
/// Clear - 4K sliding dictionary
/// </summary>
LargeSlidingDictionary = 0b0000_0000_0000_0010,
/// <summary>
/// Set - 3 Shannon-Fano trees were used
/// Clear - 2 Shannon-Fano trees were used
/// </summary>
ThreeTrees = 0b0000_0000_0000_0100,
#endregion
#region Compression Method 8 (Deflate)
/// <summary>
/// Normal (-en) compression
/// </summary>
NormalCompression = 0b0000_0000_0000_0000,
/// <summary>
/// Maximum (-ex) compression
/// </summary>
MaximumCompression = 0b0000_0000_0000_0010,
/// <summary>
/// Fast (-ef) compression
/// </summary>
FastCompression = 0b0000_0000_0000_0100,
/// <summary>
/// Super Fast (-es) compression
/// </summary>
SuperFastCompression = 0b0000_0000_0000_0110,
#endregion
#region Compression Method 14 (LZMA)
/// <summary>
/// Set - indicates an end-of-stream (EOS) marker is used to
/// mark the end of the compressed data stream.
/// Clear - an EOS marker is not present and the compressed data
/// size must be known to extract.
/// </summary>
EndOfStreamMarker = 0b0000_0000_0000_0010,
#endregion
/// <summary>
/// set - the fields crc-32, compressed size and
/// uncompressed size are set to zero in the
/// local header. The correct values are put
/// in the data descriptor immediately
/// following the compressed data.
/// </summary>
NoCRC = 0b0000_0000_0000_1000,
/// <summary>
/// Reserved for use with method 8, for enhanced deflating.
/// </summary>
EnhancedDeflateReserved = 0b0000_0000_0001_0000,
/// <summary>
/// Indicates that the file is compressed patched data.
/// </summary>
/// <remarks>Requires PKZIP version 2.70 or greater</remarks>
CompressedPatchedData = 0b0000_0000_0010_0000,
/// <summary>
/// Set - you MUST set the version needed to extract value
/// to at least 50 and you MUST also set bit 0. If AES
/// encryption is used, the version needed to extract
/// value MUST be at least 51.
/// </summary>
StrongEncryption = 0b0000_0000_0100_0000,
/// <summary>
/// Currently unused
/// </summary>
Bit7 = 0b0000_0000_1000_0000,
/// <summary>
/// Currently unused
/// </summary>
Bit8 = 0b0000_0001_0000_0000,
/// <summary>
/// Currently unused
/// </summary>
Bit9 = 0b0000_0010_0000_0000,
/// <summary>
/// Currently unused
/// </summary>
Bit10 = 0b0000_0100_0000_0000,
/// <summary>
/// Set - the filename and comment fields for this
/// file MUST be encoded using UTF-8.
/// </summary>
LanguageEncodingFlag = 0b0000_1000_0000_0000,
/// <summary>
/// Reserved by PKWARE for enhanced compression
/// </summary>
PKWAREEnhancedCompression = 0b0001_0000_0000_0000,
/// <summary>
/// Set - Set when encrypting the Central Directory to
/// indicate selected data values in the Local
/// Header are masked to hide their actual values
/// </summary>
LocalHeaderValuesMasked = 0b0010_0000_0000_0000,
/// <summary>
/// Reserved by PKWARE for alternate streams
/// </summary>
PKWAREAlternateStreams = 0b0100_0000_0000_0000,
/// <summary>
/// Reserved by PKWARE
/// </summary>
PKWAREReserved = 0b1000_0000_0000_0000,
}
public enum HeaderID : ushort
{
/// <summary>
/// Zip64 extended information extra field
/// </summary>
Zip64ExtendedInformation = 0x0001,
/// <summary>
/// AV Info
/// </summary>
AVInfo = 0x0007,
/// <summary>
/// Reserved for extended language encoding data (PFS)
/// </summary>
ExtendedLanguageEncodingData = 0x0008,
/// <summary>
/// OS/2
/// </summary>
OS2 = 0x0009,
/// <summary>
/// NTFS
/// </summary>
NTFS = 0x000A,
/// <summary>
/// OpenVMS
/// </summary>
OpenVMS = 0x000C,
/// <summary>
/// UNIX
/// </summary>
UNIX = 0x000D,
/// <summary>
/// Reserved for file stream and fork descriptors
/// </summary>
FileStreamFork = 0x000E,
/// <summary>
/// Patch Descriptor
/// </summary>
PatchDescriptor = 0x000F,
/// <summary>
/// PKCS#7 Store for X.509 Certificates
/// </summary>
PKCSStore = 0x0014,
/// <summary>
/// X.509 Certificate ID and Signature for individual file
/// </summary>
X509IndividualFile = 0x0015,
/// <summary>
/// X.509 Certificate ID for Central Directory
/// </summary>
X509CentralDirectory = 0x0016,
/// <summary>
/// Strong Encryption Header
/// </summary>
StrongEncryptionHeader = 0x0017,
/// <summary>
/// Record Management Controls
/// </summary>
RecordManagementControls = 0x0018,
/// <summary>
/// PKCS#7 Encryption Recipient Certificate List
/// </summary>
PKCSCertificateList = 0x0019,
/// <summary>
/// Reserved for Timestamp record
/// </summary>
Timestamp = 0x0020,
/// <summary>
/// Policy Decryption Key Record
/// </summary>
PolicyDecryptionKey = 0x0021,
/// <summary>
/// Smartcrypt Key Provider Record
/// </summary>
SmartcryptKeyProvider = 0x0022,
/// <summary>
/// Smartcrypt Policy Key Data Record
/// </summary>
SmartcryptPolicyKeyData = 0x0023,
/// <summary>
/// IBM S/390 (Z390), AS/400 (I400) attributes - uncompressed
/// </summary>
IBMS390AttributesUncompressed = 0x0065,
/// <summary>
/// Reserved for IBM S/390 (Z390), AS/400 (I400) attributes - compressed
/// </summary>
IBMS390AttributesCompressed = 0x0066,
/// <summary>
/// POSZIP 4690 (reserved)
/// </summary>
POSZIP4690 = 0x4690,
#region Third-Party
/// <summary>
/// Macintosh
/// </summary>
Macintosh = 0x07C8,
/// <summary>
/// Pixar USD header ID
/// </summary>
PixarUSD = 0x1986,
/// <summary>
/// ZipIt Macintosh
/// </summary>
ZipItMacintosh = 0x2605,
/// <summary>
/// ZipIt Macintosh 1.3.5+
/// </summary>
ZipItMacintosh135Plus = 0x2705,
/// <summary>
/// ZipIt Macintosh 1.3.5+
/// </summary>
ZipItMacintosh135PlusAlt = 0x2805,
/// <summary>
/// Info-ZIP Macintosh
/// </summary>
InfoZIPMacintosh = 0x334D,
/// <summary>
/// Acorn/SparkFS
/// </summary>
AcornSparkFS = 0x4341,
/// <summary>
/// Windows NT security descriptor (binary ACL)
/// </summary>
WindowsNTSecurityDescriptor = 0x4453,
/// <summary>
/// VM/CMS
/// </summary>
VMCMS = 0x4704,
/// <summary>
/// MVS
/// </summary>
MVS = 0x470F,
/// <summary>
/// THEOS (old?)
/// </summary>
THEOSold = 0x4854,
/// <summary>
/// FWKCS MD5
/// </summary>
FWKCSMD5 = 0x4B46,
/// <summary>
/// OS/2 access control list (text ACL)
/// </summary>
OS2AccessControlList = 0x4C41,
/// <summary>
/// Info-ZIP OpenVMS
/// </summary>
InfoZIPOpenVMS = 0x4D49,
/// <summary>
/// Macintosh Smartzip (??)
/// </summary>
MacintoshSmartzip = 0x4D63,
/// <summary>
/// Xceed original location extra field
/// </summary>
XceedOriginalLocation = 0x4F4C,
/// <summary>
/// AOS/VS (ACL)
/// </summary>
ADSVS = 0x5356,
/// <summary>
/// extended timestamp
/// </summary>
ExtendedTimestamp = 0x5455,
/// <summary>
/// Xceed unicode extra field
/// </summary>
XceedUnicode = 0x554E,
/// <summary>
/// Info-ZIP UNIX (original, also OS/2, NT, etc)
/// </summary>
InfoZIPUNIX = 0x5855,
/// <summary>
/// Info-ZIP Unicode Comment Extra Field
/// </summary>
InfoZIPUnicodeComment = 0x6375,
/// <summary>
/// BeOS/BeBox
/// </summary>
BeOSBeBox = 0x6542,
/// <summary>
/// THEOS
/// </summary>
THEOS = 0x6854,
/// <summary>
/// Info-ZIP Unicode Path Extra Field
/// </summary>
InfoZIPUnicodePath = 0x7075,
/// <summary>
/// AtheOS/Syllable
/// </summary>
AtheOSSyllable = 0x7441,
/// <summary>
/// ASi UNIX
/// </summary>
ASiUNIX = 0x756E,
/// <summary>
/// Info-ZIP UNIX (new)
/// </summary>
InfoZIPUNIXNew = 0x7855,
/// <summary>
/// Info-ZIP UNIX (newer UID/GID)
/// </summary>
InfoZIPUNIXNewer = 0x7875,
/// <summary>
/// Data Stream Alignment (Apache Commons-Compress)
/// </summary>
DataStreamAlignment = 0xA11E,
/// <summary>
/// Microsoft Open Packaging Growth Hint
/// </summary>
MicrosoftOpenPackagingGrowthHint = 0xA220,
/// <summary>
/// Java JAR file Extra Field Header ID
/// </summary>
JavaJAR = 0xCAFE,
/// <summary>
/// Android ZIP Alignment Extra Field
/// </summary>
AndroidZIPAlignment = 0xD935,
/// <summary>
/// Korean ZIP code page info
/// </summary>
KoreanZIPCodePage = 0xE57A,
/// <summary>
/// SMS/QDOS
/// </summary>
SMSQDOS = 0xFD4A,
/// <summary>
/// AE-x encryption structure
/// </summary>
AExEncryptionStructure = 0x9901,
/// <summary>
/// Unknown
/// </summary>
Unknown = 0x9902,
#endregion
}
public enum HostSystem : byte
{
/// <summary>
/// MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)
/// </summary>
MSDOS = 0,
/// <summary>
/// Amiga
/// </summary>
Amiga = 1,
/// <summary>
/// OpenVMS
/// </summary>
OpenVMS = 2,
/// <summary>
/// UNIX
/// </summary>
UNIX = 3,
/// <summary>
/// VM/CMS
/// </summary>
VMCMS = 4,
/// <summary>
/// Atari ST
/// </summary>
AtariST = 5,
/// <summary>
/// OS/2 H.P.F.S.
/// </summary>
OS2HPFS = 6,
/// <summary>
/// Macintosh
/// </summary>
Macintosh = 7,
/// <summary>
/// Z-System
/// </summary>
ZSystem = 8,
/// <summary>
/// CP/M
/// </summary>
CPM = 9,
/// <summary>
/// Windows NTFS
/// </summary>
WindowsNTFS = 10,
/// <summary>
/// MVS (OS/390 - Z/OS)
/// </summary>
MVS = 11,
/// <summary>
/// VSE
/// </summary>
VSE = 12,
/// <summary>
/// Acorn Risc
/// </summary>
AcornRisc = 13,
/// <summary>
/// VFAT
/// </summary>
VFAT = 14,
/// <summary>
/// alternate MVS
/// </summary>
AlternateVMS = 15,
/// <summary>
/// BeOS
/// </summary>
BeOS = 16,
/// <summary>
/// Tandem
/// </summary>
Tandem = 17,
/// <summary>
/// OS/400
/// </summary>
OS400 = 18,
/// <summary>
/// OS X (Darwin)
/// </summary>
OSX = 19,
// 20 thru 255 - unused
}
[Flags]
public enum InternalFileAttributes : ushort
{
/// <summary>
/// Set - The file is apparently an ASCII or text file
/// Clear - The file is apparently binary data
/// </summary>
ASCII = 0b0000_0000_0000_0001,
/// <summary>
/// Reserved for use by PKWARE
/// </summary>
Bit1 = 0b0000_0000_0000_0010,
/// <summary>
/// Reserved for use by PKWARE
/// </summary>
Bit2 = 0b0000_0000_0000_0100,
/*
4.4.14.2 The 0x0002 bit of this field indicates, if set, that
a 4 byte variable record length control field precedes each
logical record indicating the length of the record. The
record length control field is stored in little-endian byte
order. This flag is independent of text control characters,
and if used in conjunction with text data, includes any
control characters in the total length of the record. This
value is provided for mainframe data transfer support.
*/
}
}

View File

@@ -1,62 +0,0 @@
namespace SabreTools.Models.PortableExecutable
{
/// <summary>
/// Contains information about each item in a menu resource that does not open a menu
/// or a submenu. The structure definition provided here is for explanation only; it
/// is not present in any standard header file.
///
/// Contains information about the menu items in a menu resource that open a menu
/// or a submenu. The structure definition provided here is for explanation only;
/// it is not present in any standard header file.
/// </summary>
/// <see href="https://learn.microsoft.com/en-us/windows/win32/menurc/normalmenuitem"/>
/// <see href="https://learn.microsoft.com/en-us/windows/win32/menurc/popupmenuitem"/>
public sealed class MenuItem
{
#region NORMALMENUITEM
/// <summary>
/// The type of menu item.
/// </summary>
public MenuFlags NormalResInfo { get; set; }
/// <summary>
/// A null-terminated Unicode string that contains the text for this menu item.
/// There is no fixed limit on the size of this string.
/// </summary>
public string? NormalMenuText { get; set; }
#endregion
#region POPUPMENUITEM
/// <summary>
/// Describes the menu item.
/// </summary>
public MenuFlags PopupItemType { get; set; }
/// <summary>
/// Describes the menu item.
/// </summary>
public MenuFlags PopupState { get; set; }
/// <summary>
/// A numeric expression that identifies the menu item that is passed in the
/// WM_COMMAND message.
/// </summary>
public uint PopupID { get; set; }
/// <summary>
/// A set of bit flags that specify the type of menu item.
/// </summary>
public MenuFlags PopupResInfo { get; set; }
/// <summary>
/// A null-terminated Unicode string that contains the text for this menu item.
/// There is no fixed limit on the size of this string.
/// </summary>
public string? PopupMenuText { get; set; }
#endregion
}
}

View File

@@ -1,41 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Assembly Properties -->
<TargetFrameworks>net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Version>1.4.3</Version>
<WarningsNotAsErrors>CS0618</WarningsNotAsErrors>
<!-- Package Properties -->
<Authors>Matt Nadareski</Authors>
<Description>Common models used by other SabreTools projects</Description>
<Copyright>Copyright (c) Matt Nadareski 2022-2024</Copyright>
<PackageProjectUrl>https://github.com/SabreTools/</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/SabreTools/SabreTools.Models</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>model models executable protection archive</PackageTags>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="" />
</ItemGroup>
<!-- Support for old .NET versions -->
<ItemGroup Condition="$(TargetFramework.StartsWith(`net2`)) OR $(TargetFramework.StartsWith(`net3`))">
<PackageReference Include="MinValueTupleBridge" Version="0.2.0" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith(`net4`))">
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

View File

@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Models", "SabreTools.Models.csproj", "{51F0D5D9-7C2B-445A-8ECD-4A47B33609C4}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Models", "SabreTools.Models\SabreTools.Models.csproj", "{51F0D5D9-7C2B-445A-8ECD-4A47B33609C4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@@ -6,11 +6,13 @@ namespace SabreTools.Models.BDPlus
/// <summary>
/// "BDSVM_CC"
/// </summary>
/// <remarks>8 bytes</remarks>
public string? Signature { get; set; }
/// <summary>
/// 5 bytes of unknown data
/// Unknown data
/// </summary>
/// <remarks>5 bytes</remarks>
public byte[]? Unknown1 { get; set; }
/// <summary>
@@ -29,8 +31,9 @@ namespace SabreTools.Models.BDPlus
public byte Day { get; set; }
/// <summary>
/// 4 bytes of unknown data
/// Unknown data
/// </summary>
/// <remarks>4 bytes</remarks>
public byte[]? Unknown2 { get; set; }
/// <summary>

View File

@@ -14,6 +14,6 @@
/// <summary>
/// Files
/// </summary>
public FileEntry?[]? Files { get; set; }
public FileEntry[]? Files { get; set; }
}
}

View File

@@ -11,6 +11,7 @@ namespace SabreTools.Models.BSP
/// <summary>
/// Offsets
/// </summary>
/// <remarks>TextureCount entries</remarks>
public uint[]? Offsets { get; set; }
}
}

View File

@@ -25,7 +25,7 @@ namespace SabreTools.Models.CFB
///
/// If Header Major Version is 4, there MUST be 1,024 fields specified to fill a 4,096-byte sector
/// </remarks>
public SectorNumber?[]? FATSectorNumbers { get; set; }
public SectorNumber[]? FATSectorNumbers { get; set; }
/// <summary>
/// The mini FAT is used to allocate space in the mini stream.
@@ -38,7 +38,7 @@ namespace SabreTools.Models.CFB
///
/// If Header Major Version is 4, there MUST be 1,024 fields specified to fill a 4,096-byte sector
/// </remarks>
public SectorNumber?[]? MiniFATSectorNumbers { get; set; }
public SectorNumber[]? MiniFATSectorNumbers { get; set; }
/// <summary>
/// The DIFAT array is used to represent storage of the FAT sectors.
@@ -55,7 +55,7 @@ namespace SabreTools.Models.CFB
/// If Header Major Version is 4, there MUST be 1,023 fields specified
/// to fill a 4,096-byte sector minus the "Next DIFAT Sector Location" field.
/// </remarks>
public SectorNumber?[]? DIFATSectorNumbers { get; set; }
public SectorNumber[]? DIFATSectorNumbers { get; set; }
/// <summary>
/// The directory entry array is an array of directory entries that
@@ -87,6 +87,6 @@ namespace SabreTools.Models.CFB
/// all zeroes. The Modified Time field in the root storage directory
/// entry MAY be all zeroes.
/// <remarks>
public DirectoryEntry?[]? DirectoryEntries { get; set; }
public DirectoryEntry[]? DirectoryEntries { get; set; }
}
}

View File

@@ -1,8 +1,10 @@
using System;
using System.Runtime.InteropServices;
namespace SabreTools.Models.CFB
{
/// <see href="https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-CFB/%5bMS-CFB%5d.pdf"/>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public sealed class DirectoryEntry
{
/// <summary>
@@ -16,13 +18,15 @@ namespace SabreTools.Models.CFB
/// The following characters are illegal and MUST NOT be part of the
/// name: '/', '\', ':', '!'.
/// </summary>
public string? Name { get; set; }
/// <remarks>64 bytes</remarks>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string? Name;
/// <summary>
/// This field MUST be 0x00, 0x01, 0x02, or 0x05, depending on the
/// actual type of object. All other values are not valid.
/// </summary>
public ushort NameLength { get; set; }
public ushort NameLength;
/// <summary>
/// This field MUST match the length of the Directory Entry Name Unicode
@@ -30,31 +34,36 @@ namespace SabreTools.Models.CFB
/// terminating null character in the count. This length MUST NOT exceed 64,
/// the maximum size of the Directory Entry Name field.
/// </summary>
public ObjectType ObjectType { get; set; }
[MarshalAs(UnmanagedType.U1)]
public ObjectType ObjectType;
/// <summary>
/// This field MUST be 0x00 (red) or 0x01 (black). All other values are not valid.
/// </summary>
public ColorFlag ColorFlag { get; set; }
[MarshalAs(UnmanagedType.U1)]
public ColorFlag ColorFlag;
/// <summary>
/// This field contains the stream ID of the left sibling. If there
/// is no left sibling, the field MUST be set to NOSTREAM (0xFFFFFFFF).
/// </summary>
public StreamID LeftSiblingID { get; set; }
[MarshalAs(UnmanagedType.U4)]
public StreamID LeftSiblingID;
/// <summary>
/// This field contains the stream ID of the right sibling. If there
/// is no right sibling, the field MUST be set to NOSTREAM (0xFFFFFFFF).
/// </summary>
public StreamID RightSiblingID { get; set; }
[MarshalAs(UnmanagedType.U4)]
public StreamID RightSiblingID;
/// <summary>
/// This field contains the stream ID of a child object. If there is no
/// child object, including all entries for stream objects, the field
/// MUST be set to NOSTREAM (0xFFFFFFFF).
/// </summary>
public StreamID ChildID { get; set; }
[MarshalAs(UnmanagedType.U4)]
public StreamID ChildID;
/// <summary>
/// This field contains an object class GUID, if this entry is for a
@@ -67,7 +76,7 @@ namespace SabreTools.Models.CFB
/// this value is not all zeroes, the object class GUID can be used as a
/// parameter to start applications.
/// </summary>
public Guid CLSID { get; set; }
public Guid CLSID;
/// <summary>
/// This field contains the user-defined flags if this entry is for a storage
@@ -78,7 +87,7 @@ namespace SabreTools.Models.CFB
/// objects without explicitly setting state bits, it MUST write all zeroes
/// by default.
/// </summary>
public uint StateBits { get; set; }
public uint StateBits;
/// <summary>
/// This field contains the creation time for a storage object, or all zeroes
@@ -88,7 +97,7 @@ namespace SabreTools.Models.CFB
/// object, this field MUST be all zeroes, and the creation time is retrieved
/// or set on the compound file itself.
/// </summary>
public ulong CreationTime { get; set; }
public ulong CreationTime;
/// <summary>
/// This field contains the modification time for a storage object, or all
@@ -98,7 +107,7 @@ namespace SabreTools.Models.CFB
/// storage object, this field MAY<2> be set to all zeroes, and the modified
/// time is retrieved or set on the compound file itself.
/// </summary>
public ulong ModifiedTime { get; set; }
public ulong ModifiedTime;
/// <summary>
/// This field contains the first sector location if this is a stream object.
@@ -106,7 +115,7 @@ namespace SabreTools.Models.CFB
/// mini stream, if the mini stream exists. For a storage object, this field MUST
/// be set to all zeroes.
/// </summary>
public uint StartingSectorLocation { get; set; }
public uint StartingSectorLocation;
/// <summary>
/// This 64-bit integer field contains the size of the user-defined data if this
@@ -128,6 +137,6 @@ namespace SabreTools.Models.CFB
/// unless there is a specific reason to do otherwise (for example, a parser whose
/// purpose is to verify the correctness of a compound file).
/// </remarks>
public ulong StreamSize { get; set; }
public ulong StreamSize;
}
}

View File

@@ -1,38 +1,40 @@
using System;
using System.Runtime.InteropServices;
namespace SabreTools.Models.CFB
{
/// <see href="https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-CFB/%5bMS-CFB%5d.pdf"/>
[StructLayout(LayoutKind.Sequential)]
public sealed class FileHeader
{
/// <summary>
/// Iddentification signature for the compound file structure, and MUST be
/// set to the value 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1.
/// </summary>
public ulong Signature { get; set; }
public ulong Signature;
/// <summary>
/// Reserved and unused class ID that MUST be set to all zeroes (CLSID_NULL)
/// </summary>
public Guid CLSID { get; set; }
public Guid CLSID;
/// <summary>
/// Version number for nonbreaking changes. This field SHOULD be set to
/// 0x003E if the major version field is either 0x0003 or 0x0004.
/// </summary>
public ushort MinorVersion { get; set; }
public ushort MinorVersion;
/// <summary>
/// Version number for breaking changes. This field MUST be set to either
/// 0x0003 (version 3) or 0x0004 (version 4).
/// </summary>
public ushort MajorVersion { get; set; }
public ushort MajorVersion;
/// <summary>
/// This field MUST be set to 0xFFFE. This field is a byte order mark for
/// all integer fields, specifying little-endian byte order.
/// </summary>
public ushort ByteOrder { get; set; }
public ushort ByteOrder;
/// <summary>
/// This field MUST be set to 0x0009, or 0x000c, depending on the Major
@@ -45,19 +47,21 @@ namespace SabreTools.Models.CFB
/// If Major Version is 4, the Sector Shift MUST be 0x000C, specifying a
/// sector size of 4096 bytes.
/// </summary>
public ushort SectorShift { get; set; }
public ushort SectorShift;
/// <summary>
/// This field MUST be set to 0x0006. This field specifies the sector size
/// of the Mini Stream as a power of 2. The sector size of the Mini Stream
/// MUST be 64 bytes.
/// </summary>
public ushort MiniSectorShift { get; set; }
public ushort MiniSectorShift;
/// <summary>
/// This field MUST be set to all zeroes.
/// </summary>
public byte[]? Reserved { get; set; }
/// <remarks>6 bytes</remarks>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[]? Reserved;
/// <summary>
/// This integer field contains the count of the number of directory sectors
@@ -66,18 +70,18 @@ namespace SabreTools.Models.CFB
/// If Major Version is 3, the Number of Directory Sectors MUST be zero. This
/// field is not supported for version 3 compound files.
/// </summary>
public uint NumberOfDirectorySectors { get; set; }
public uint NumberOfDirectorySectors;
/// <summary>
/// This integer field contains the count of the number of FAT sectors in the
/// compound file.
/// </summary>
public uint NumberOfFATSectors { get; set; }
public uint NumberOfFATSectors;
/// <summary>
/// This integer field contains the starting sector number for the directory stream.
/// </summary>
public uint FirstDirectorySectorLocation { get; set; }
public uint FirstDirectorySectorLocation;
/// <summary>
/// This integer field MAY contain a sequence number that is incremented every time
@@ -85,7 +89,7 @@ namespace SabreTools.Models.CFB
/// This is the field that MUST be set to all zeroes if file transactions are not
/// implemented.
/// </summary>
public uint TransactionSignatureNumber { get; set; }
public uint TransactionSignatureNumber;
/// <summary>
/// This integer field MUST be set to 0x00001000. This field specifies the maximum
@@ -94,34 +98,36 @@ namespace SabreTools.Models.CFB
/// greater than or equal to this cutoff size must be allocated as normal sectors from
/// the FAT.
/// </summary>
public uint MiniStreamCutoffSize { get; set; }
public uint MiniStreamCutoffSize;
/// <summary>
/// This integer field contains the starting sector number for the mini FAT.
/// </summary>
public uint FirstMiniFATSectorLocation { get; set; }
public uint FirstMiniFATSectorLocation;
/// <summary>
/// This integer field contains the count of the number of mini FAT sectors in the
/// compound file.
/// </summary>
public uint NumberOfMiniFATSectors { get; set; }
public uint NumberOfMiniFATSectors;
/// <summary>
/// This integer field contains the starting sector number for the DIFAT.
/// </summary>
public uint FirstDIFATSectorLocation { get; set; }
public uint FirstDIFATSectorLocation;
/// <summary>
/// This integer field contains the count of the number of DIFAT sectors in the
/// compound file.
/// </summary>
public uint NumberOfDIFATSectors { get; set; }
public uint NumberOfDIFATSectors;
/// <summary>
/// This array of 32-bit integer fields contains the first 109 FAT sector
/// locations of the compound file
/// </summary>
public SectorNumber?[]? DIFAT { get; set; }
/// <remarks>109 entries</remarks>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 109)]
public SectorNumber[]? DIFAT;
}
}

View File

@@ -75,7 +75,7 @@ namespace SabreTools.Models.CFB
/// Properties
/// </summary>
/// <remarks>Each Variant might be followed by an index and offset value</remarks>
public Variant?[]? Properties { get; set; }
public Variant[]? Properties { get; set; }
#endregion
}

View File

@@ -1,28 +1,31 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public class CompressedMapEntryV5
[StructLayout(LayoutKind.Sequential)]
public sealed class CompressedMapEntryV5
{
/// <summary>
/// Compression type
/// </summary>
public byte Compression { get; set; }
public byte Compression;
/// <summary>
/// Compressed length
/// </summary>
/// <remarks>Actually UInt24</remarks>
public uint CompLength { get; set; }
public uint CompLength;
/// <summary>
/// Offset
/// </summary>
/// <remarks>Actually UInt48</remarks>
public ulong Offset { get; set; }
public ulong Offset;
/// <summary>
/// CRC-16 of the data
/// </summary>
public ushort CRC { get; set; }
public ushort CRC;
}
}

View File

@@ -1,42 +1,45 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public class CompressedMapHeaderV5
[StructLayout(LayoutKind.Sequential)]
public sealed class CompressedMapHeaderV5
{
/// <summary>
/// Length of compressed map
/// </summary>
public uint Length { get; set; }
public uint Length;
/// <summary>
/// Offset of first block
/// </summary>
/// <remarks>Actually UInt48</remarks>
public ulong DataStart { get; set; }
public ulong DataStart;
/// <summary>
/// CRC-16 of the map
/// </summary>
public ushort CRC { get; set; }
public ushort CRC;
/// <summary>
/// Bits used to encode complength
/// </summary>
public byte LengthBits { get; set; }
public byte LengthBits;
/// <summary>
/// Bits used to encode self-refs
/// </summary>
public byte HunkBits { get; set; }
public byte HunkBits;
/// <summary>
/// Bits used to encode parent unit refs
/// </summary>
public byte ParentUnitBits { get; set; }
public byte ParentUnitBits;
/// <summary>
/// Future use
/// </summary>
public byte Reserved { get; set; }
public byte Reserved;
}
}

View File

@@ -1,16 +1,19 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public class MapV1
[StructLayout(LayoutKind.Sequential)]
public sealed class MapV1
{
/// <summary>
/// Starting offset within the file
/// </summary>
public ulong StartingOffset { get; set; }
public ulong StartingOffset;
/// <summary>
/// Length of data; If == hunksize, data is uncompressed
/// </summary>
public ulong Length { get; set; }
public ulong Length;
}
}

View File

@@ -1,31 +1,34 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public class MapV3
[StructLayout(LayoutKind.Sequential)]
public sealed class MapV3
{
/// <summary>
/// Starting offset within the file
/// </summary>
public ulong StartingOffset { get; set; }
public ulong StartingOffset;
/// <summary>
/// 32-bit CRC of the uncompressed data
/// </summary>
public uint CRC32 { get; set; }
public uint CRC32;
/// <summary>
/// Lower 16 bits of length
/// </summary>
public ushort LengthLo { get; set; }
public ushort LengthLo;
/// <summary>
/// Upper 8 bits of length
/// </summary>
public byte LengthHi { get; set; }
public byte LengthHi;
/// <summary>
/// Flags, indicating compression info
/// </summary>
public byte Flags { get; set; }
public byte Flags;
}
}

View File

@@ -1,11 +1,14 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
[StructLayout(LayoutKind.Sequential)]
public class UncompressedMapV5
{
/// <summary>
/// Starting offset / hunk size
/// </summary>
public uint StartingOffset { get; set; }
public uint StartingOffset;
}
}

View File

@@ -4,7 +4,7 @@ namespace SabreTools.Models.Charts
{
/// <see href="https://github.com/TheNathannator/GuitarGame_ChartFormats/tree/main/doc/FileFormats/song.ini"/>
/// <remarks>[song]/[Song]</remarks>
internal class SongIni
public class SongIni
{
#region Song/Chart Metadata

View File

@@ -0,0 +1,16 @@
namespace SabreTools.Models.Charts
{
/// <see href="https://github.com/TheNathannator/GuitarGame_ChartFormats/blob/main/doc/FileFormats/Other/Frets%20on%20Fire%20X/Careers.md"/>
public class Tier
{
/// <summary>
/// Display name of the tier.
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Name used for associating a song with this tier, and for checking unlock requirements.
/// </summary>
public string? UnlockId { get; set; }
}
}

View File

@@ -1,10 +1,8 @@
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
public class TitlesIni
{
/// <summary>
/// A space-separated list of .ini sections to include in the career.
@@ -13,9 +11,8 @@ namespace SabreTools.Models.Charts
public string[]? SectionList { get; set; }
/// <summary>
/// `name` - Display name of the tier.
/// `unlock_id` - Name used for associating a song with this tier, and for checking unlock requirements.
/// This entry points to other sections that should be used as part of the career.
/// </summary>
public Dictionary<string, (string? Name, string? UnlockId)>? Sections { get; set; }
public Tier[]? Sections { get; set; }
}
}

Some files were not shown because too many files have changed in this diff Show More