23 Commits

Author SHA1 Message Date
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
168 changed files with 1001 additions and 1477 deletions

View File

@@ -16,7 +16,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
dotnet-version: 9.0.x
- name: Restore dependencies
run: dotnet restore

View File

@@ -11,7 +11,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
dotnet-version: 9.0.x
- name: Build
run: dotnet build

View File

@@ -4,24 +4,6 @@ This library comprises of models that represent either directly serializable or
Find the link to the Nuget package [here](https://www.nuget.org/packages/SabreTools.Models).
In most completed models for serialization, there is a section that looks like the following:
```c#
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
```
This code should be removed before the models are used. This is only included during debugging and implementation as to ensure that there are no notable holes in the models that would disallow 1:1 replication of inputs.
## Missing Metadata Models
The following metadata file formats do not have models included in this library yet and, as such, do not have serializers:

View File

@@ -201,17 +201,5 @@ namespace SabreTools.Models.ArchiveDotOrg
public string? Width { get; set; }
#endregion
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -8,17 +8,5 @@ namespace SabreTools.Models.ArchiveDotOrg
{
[XmlElement("file")]
public File?[]? File { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -47,12 +47,5 @@ namespace SabreTools.Models.AttractMode
public string? PlayedTime { get; set; }
public string? FileIsAvailable { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -2,7 +2,7 @@ namespace SabreTools.Models.BFPK
{
public static class Constants
{
public static readonly byte[] SignatureBytes = new byte[] { 0x42, 0x46, 0x50, 0x4b };
public static readonly byte[] SignatureBytes = [0x42, 0x46, 0x50, 0x4b];
public const string SignatureString = "BFPK";

View File

@@ -4,7 +4,7 @@ namespace SabreTools.Models.CFB
{
public static class Constants
{
public static readonly byte[] SignatureBytes = new byte[] { 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1 };
public static readonly byte[] SignatureBytes = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];
public const ulong SignatureUInt64 = 0xE11AB1A1E011CFD0;
@@ -15,17 +15,17 @@ namespace SabreTools.Models.CFB
/// <summary>
/// Installer Package (msi), Merge Module (msm), Patch Creation Properties (pcp)
/// </summary>
public static readonly Guid InstallerPackage = new Guid("000c1084-0000-0000-c000-000000000046");
public static readonly Guid InstallerPackage = new("000c1084-0000-0000-c000-000000000046");
/// <summary>
/// Patch Package (msp)
/// </summary>
public static readonly Guid PatchPackage = new Guid("000C1086-0000-0000-C000-000000000046");
public static readonly Guid PatchPackage = new("000C1086-0000-0000-C000-000000000046");
/// <summary>
/// Transform (mst)
/// </summary>
public static readonly Guid Transform = new Guid("000C1082-0000-0000-C000-000000000046");
public static readonly Guid Transform = new("000C1082-0000-0000-C000-000000000046");
#endregion
@@ -35,17 +35,17 @@ namespace SabreTools.Models.CFB
/// <summary>
/// The Summary Information Property Set
/// </summary>
public static readonly Guid FMTID_SummaryInformation = new Guid("F29F85E0-4FF9-1068-AB91-08002B27B3D9");
public static readonly Guid FMTID_SummaryInformation = new("F29F85E0-4FF9-1068-AB91-08002B27B3D9");
/// <summary>
/// The DocumentSummaryInformation and UserDefined Property Sets
/// </summary>
public static readonly Guid FMTID_DocSummaryInformation = new Guid("D5CDD502-2E9C-101B-9397-08002B2CF9AE");
public static readonly Guid FMTID_DocSummaryInformation = new("D5CDD502-2E9C-101B-9397-08002B2CF9AE");
/// <summary>
/// The DocumentSummaryInformation and UserDefined Property Sets
/// </summary>
public static readonly Guid FMTID_UserDefinedProperties = new Guid("D5CDD505-2E9C-101B-9397-08002B2CF9AE");
public static readonly Guid FMTID_UserDefinedProperties = new("D5CDD505-2E9C-101B-9397-08002B2CF9AE");
#endregion
}

View File

@@ -0,0 +1,23 @@
namespace SabreTools.Models.CHD
{
public static class Constants
{
public const string SignatureString = "MComprHD";
#region Header Sizes
public const int HeaderV1Size = 76;
public const int HeaderV2Size = 80;
public const int HeaderV3Size = 120;
public const int HeaderV4Size = 108;
public const int HeaderV5Size = 124;
#endregion
#region Metadata Parameters
public const uint CHDMETAINDEX_APPEND = uint.MaxValue;
#endregion
}
}

View File

@@ -2,6 +2,79 @@ using System;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chdcodec.h"/>
public enum AVHuffCodec
{
DECOMPRESS_CONFIG = 1,
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chdcodec.h"/>
public enum CodecType : uint
{
CHD_CODEC_NONE = 0,
#region General Codecs
/// <remarks>"zlib"</remarks>
ZLIB = 0x7a6c6962,
/// <remarks>"zstd"</remarks>
ZSTD = 0x7a737464,
/// <remarks>"lzma"</remarks>
LZMA = 0x6c7a6d61,
/// <remarks>"huff"</remarks>
HUFFMAN = 0x68756666,
/// <remarks>"flac"</remarks>
FLAC = 0x666c6163,
#endregion
#region General Codecs with CD Frontend
/// <remarks>"cdzl"</remarks>
CD_ZLIB = 0x63647a6c,
/// <remarks>"cdzs"</remarks>
CD_ZSTD = 0x63647a73,
/// <remarks>"cdlz"</remarks>
CD_LZMA = 0x63646c7a,
/// <remarks>"cdfl"</remarks>
CD_FLAC = 0x6364666c,
#endregion
#region A/V Codecs
/// <remarks>"avhu"</remarks>
AVHUFF = 0x61766875,
#endregion
#region Pseudo-Codecs Returned by hunk_info
/// <summary>
/// Copy of another hunk
/// </summary>
CHD_CODEC_SELF = 1,
/// <summary>
/// Copy of a parent's hunk
/// </summary>
CHD_CODEC_PARENT = 2,
/// <summary>
/// Legacy "mini" 8-byte repeat
/// </summary>
CHD_CODEC_MINI = 3,
#endregion
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public enum CompressionType : uint
{
@@ -25,6 +98,35 @@ namespace SabreTools.Models.CHD
#endregion
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public enum Error : uint
{
NO_INTERFACE = 1,
NOT_OPEN,
ALREADY_OPEN,
INVALID_FILE,
INVALID_DATA,
REQUIRES_PARENT,
FILE_NOT_WRITEABLE,
CODEC_ERROR,
INVALID_PARENT,
HUNK_OUT_OF_RANGE,
DECOMPRESSION_ERROR,
COMPRESSION_ERROR,
CANT_VERIFY,
METADATA_NOT_FOUND,
INVALID_METADATA_SIZE,
UNSUPPORTED_VERSION,
VERIFY_INCOMPLETE,
INVALID_METADATA,
INVALID_STATE,
OPERATION_PENDING,
UNSUPPORTED_FORMAT,
UNKNOWN_COMPRESSION,
WALKING_PARENT,
COMPRESSING
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
[Flags]
public enum Flags : uint
@@ -39,4 +141,218 @@ namespace SabreTools.Models.CHD
/// </summary>
DriveAllowsWrites = 0x00000002,
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
[Flags]
public enum MetadataFlags : byte
{
/// <summary>
/// Indicates data is checksummed
/// </summary>
CHD_MDFLAGS_CHECKSUM = 0x01,
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.h"/>
public enum MetadataTag : uint
{
CHDMETATAG_WILDCARD = 0,
#region Hard Disk
/// <summary>
/// Standard hard disk metadata
/// </summary>
/// <remarks>"GDDD"</remarks>
HARD_DISK_METADATA_TAG = 0x47444444,
/// <summary>
/// Hard disk identify information
/// </summary>
/// <remarks>"IDNT"</remarks>
HARD_DISK_IDENT_METADATA_TAG = 0x49444e54,
/// <summary>
/// Hard disk key information
/// </summary>
/// <remarks>"KEY "</remarks>
HARD_DISK_KEY_METADATA_TAG = 0x4b455920,
#endregion
#region PCMCIA
/// <summary>
/// PCMCIA CIS information
/// </summary>
/// <remarks>"CIS "</remarks>
PCMCIA_CIS_METADATA_TAG = 0x43495320,
#endregion
#region CD-ROM
/// <remarks>"CHCD"</remarks>
CDROM_OLD_METADATA_TAG = 0x43484344,
/// <remarks>"CHTR"</remarks>
CDROM_TRACK_METADATA_TAG = 0x43485452,
/// <remarks>"CHT2"</remarks>
CDROM_TRACK_METADATA2_TAG = 0x43485432,
#endregion
#region GD-ROM
/// <remarks>"CHGT"</remarks>
GDROM_OLD_METADATA_TAG = 0x43484754,
/// <remarks>"CHGD"</remarks>
GDROM_TRACK_METADATA_TAG = 0x43484744,
#endregion
#region DVD
/// <summary>
/// Standard DVD metadata
/// </summary>
/// <remarks>"DVD "</remarks>
DVD_METADATA_TAG = 0x44564420,
#endregion
#region A/V
/// <summary>
/// Standard A/V metadata
/// </summary>
/// <remarks>"AVAV"</remarks>
AV_METADATA_TAG = 0x41564156,
/// <summary>
/// A/V laserdisc frame metadata
/// </summary>
/// <remarks>"AVLD"</remarks>
AV_LD_METADATA_TAG = 0x41564c44,
#endregion
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.cpp"/>
public enum V34EntryType : uint
{
/// <summary>
/// Invalid type
/// </summary>
V34_MAP_ENTRY_TYPE_INVALID = 0,
/// <summary>
/// Standard compression
/// </summary>
V34_MAP_ENTRY_TYPE_COMPRESSED = 1,
/// <summary>
/// Uncompressed data
/// </summary>
V34_MAP_ENTRY_TYPE_UNCOMPRESSED = 2,
/// <summary>
/// Mini: use offset as raw data
/// </summary>
V34_MAP_ENTRY_TYPE_MINI = 3,
/// <summary>
/// Same as another hunk in this file
/// </summary>
V34_MAP_ENTRY_TYPE_SELF_HUNK = 4,
/// <summary>
/// Same as a hunk in the parent file
/// </summary>
V34_MAP_ENTRY_TYPE_PARENT_HUNK = 5,
/// <summary>
/// Compressed with secondary algorithm (usually FLAC CDDA)
/// </summary>
V34_MAP_ENTRY_TYPE_2ND_COMPRESSED = 6,
}
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.cpp"/>
public enum V5CompressionType : uint
{
// These types are live when running
/// <summary>
/// Codec #0
/// </summary>
COMPRESSION_TYPE_0 = 0,
/// <summary>
/// Codec #1
/// </summary>
COMPRESSION_TYPE_1 = 1,
/// <summary>
/// Codec #2
/// </summary>
COMPRESSION_TYPE_2 = 2,
/// <summary>
/// Codec #3
/// </summary>
COMPRESSION_TYPE_3 = 3,
/// <summary>
/// No compression; implicit length = hunkbytes
/// </summary>
COMPRESSION_NONE = 4,
/// <summary>
/// Same as another block in this CHD
/// </summary>
COMPRESSION_SELF = 5,
/// <summary>
/// Same as a hunk's worth of units in the parent CHD
/// </summary>
COMPRESSION_PARENT = 6,
// These additional pseudo-types are used for compressed encodings
/// <summary>
/// Start of small RLE run (4-bit length)
/// </summary>
COMPRESSION_RLE_SMALL,
/// <summary>
/// Start of large RLE run (8-bit length)
/// </summary>
COMPRESSION_RLE_LARGE,
/// <summary>
/// Same as the last COMPRESSION_SELF block
/// </summary>
COMPRESSION_SELF_0,
/// <summary>
/// Same as the last COMPRESSION_SELF block + 1
/// </summary>
COMPRESSION_SELF_1,
/// <summary>
/// Same block in the parent
/// </summary>
COMPRESSION_PARENT_SELF,
/// <summary>
/// Same as the last COMPRESSION_PARENT block
/// </summary>
COMPRESSION_PARENT_0,
/// <summary>
/// Same as the last COMPRESSION_PARENT block + 1
/// </summary>
COMPRESSION_PARENT_1
}
}

View File

@@ -1,21 +1,25 @@
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, CharSet = CharSet.Unicode)]
public abstract class Header
{
/// <summary>
/// 'MComprHD'
/// </summary>
public string? Tag { get; set; }
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string? Tag;
/// <summary>
/// Length of header (including tag and length fields)
/// </summary>
public uint Length { get; set; }
public uint Length;
/// <summary>
/// Drive format version
/// </summary>
public uint Version { get; set; }
public uint Version;
}
}

View File

@@ -1,51 +1,58 @@
namespace SabreTools.Models.CHD
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, CharSet = CharSet.Unicode)]
public class HeaderV1 : Header
{
/// <summary>
/// Flags
/// </summary>
public Flags Flags { get; set; }
[MarshalAs(UnmanagedType.U4)]
public Flags Flags;
/// <summary>
/// Compression type
/// </summary>
public CompressionType Compression { get; set; }
[MarshalAs(UnmanagedType.U4)]
public CompressionType Compression;
/// <summary>
/// 512-byte sectors per hunk
/// </summary>
public uint HunkSize { get; set; }
public uint HunkSize;
/// <summary>
/// Total # of hunks represented
/// </summary>
public uint TotalHunks { get; set; }
public uint TotalHunks;
/// <summary>
/// Number of cylinders on hard disk
/// </summary>
public uint Cylinders { get; set; }
public uint Cylinders;
/// <summary>
/// Number of heads on hard disk
/// </summary>
public uint Heads { get; set; }
public uint Heads;
/// <summary>
/// Number of sectors on hard disk
/// </summary>
public uint Sectors { get; set; }
public uint Sectors;
/// <summary>
/// MD5 checksum of raw data
/// </summary>
public byte[]? MD5 { get; set; } = new byte[16];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] MD5 = new byte[16];
/// <summary>
/// MD5 checksum of parent file
/// </summary>
public byte[]? ParentMD5 { get; set; } = new byte[16];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] ParentMD5 = new byte[16];
}
}

View File

@@ -1,56 +1,63 @@
namespace SabreTools.Models.CHD
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, CharSet = CharSet.Unicode)]
public class HeaderV2 : Header
{
/// <summary>
/// Flags
/// </summary>
public Flags Flags { get; set; }
[MarshalAs(UnmanagedType.U4)]
public Flags Flags;
/// <summary>
/// Compression type
/// </summary>
public CompressionType Compression { get; set; }
[MarshalAs(UnmanagedType.U4)]
public CompressionType Compression;
/// <summary>
/// Seclen-byte sectors per hunk
/// </summary>
public uint HunkSize { get; set; }
public uint HunkSize;
/// <summary>
/// Total # of hunks represented
/// </summary>
public uint TotalHunks { get; set; }
public uint TotalHunks;
/// <summary>
/// Number of cylinders on hard disk
/// </summary>
public uint Cylinders { get; set; }
public uint Cylinders;
/// <summary>
/// Number of heads on hard disk
/// </summary>
public uint Heads { get; set; }
public uint Heads;
/// <summary>
/// Number of sectors on hard disk
/// </summary>
public uint Sectors { get; set; }
public uint Sectors;
/// <summary>
/// MD5 checksum of raw data
/// </summary>
public byte[]? MD5 { get; set; } = new byte[16];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[]? MD5 = new byte[16];
/// <summary>
/// MD5 checksum of parent file
/// </summary>
public byte[]? ParentMD5 { get; set; } = new byte[16];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[]? ParentMD5 = new byte[16];
/// <summary>
/// Number of bytes per sector
/// </summary>
public uint BytesPerSector { get; set; }
public uint BytesPerSector;
}
}

View File

@@ -1,56 +1,65 @@
namespace SabreTools.Models.CHD
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, CharSet = CharSet.Unicode)]
public class HeaderV3 : Header
{
/// <summary>
/// Flags
/// </summary>
public Flags Flags { get; set; }
[MarshalAs(UnmanagedType.U4)]
public Flags Flags;
/// <summary>
/// Compression type
/// </summary>
public CompressionType Compression { get; set; }
[MarshalAs(UnmanagedType.U4)]
public CompressionType Compression;
/// <summary>
/// Total # of hunks represented
/// </summary>
public uint TotalHunks { get; set; }
public uint TotalHunks;
/// <summary>
/// Logical size of the data (in bytes)
/// </summary>
public ulong LogicalBytes { get; set; }
public ulong LogicalBytes;
/// <summary>
/// Offset to the first blob of metadata
/// </summary>
public ulong MetaOffset { get; set; }
public ulong MetaOffset;
/// <summary>
/// MD5 checksum of raw data
/// </summary>
public byte[]? MD5 { get; set; } = new byte[16];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[]? MD5 = new byte[16];
/// <summary>
/// MD5 checksum of parent file
/// </summary>
public byte[]? ParentMD5 { get; set; } = new byte[16];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[]? ParentMD5 = new byte[16];
/// <summary>
/// Number of bytes per hunk
/// </summary>
public uint HunkBytes { get; set; }
public uint HunkBytes;
/// <summary>
/// SHA1 checksum of raw data
/// </summary>
public byte[]? SHA1 { get; set; } = new byte[20];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[]? SHA1 = new byte[20];
/// <summary>
/// SHA1 checksum of parent file
/// </summary>
public byte[]? ParentSHA1 { get; set; } = new byte[20];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[]? ParentSHA1 = new byte[20];
}
}

View File

@@ -1,51 +1,59 @@
namespace SabreTools.Models.CHD
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, CharSet = CharSet.Unicode)]
public class HeaderV4 : Header
{
/// <summary>
/// Flags
/// </summary>
public Flags Flags { get; set; }
[MarshalAs(UnmanagedType.U4)]
public Flags Flags;
/// <summary>
/// Compression type
/// </summary>
public CompressionType Compression { get; set; }
[MarshalAs(UnmanagedType.U4)]
public CompressionType Compression;
/// <summary>
/// Total # of hunks represented
/// </summary>
public uint TotalHunks { get; set; }
public uint TotalHunks;
/// <summary>
/// Logical size of the data (in bytes)
/// </summary>
public ulong LogicalBytes { get; set; }
public ulong LogicalBytes;
/// <summary>
/// Offset to the first blob of metadata
/// </summary>
public ulong MetaOffset { get; set; }
public ulong MetaOffset;
/// <summary>
/// Number of bytes per hunk
/// </summary>
public uint HunkBytes { get; set; }
public uint HunkBytes;
/// <summary>
/// Combined raw+meta SHA1
/// </summary>
public byte[]? SHA1 { get; set; } = new byte[20];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[]? SHA1 = new byte[20];
/// <summary>
/// Combined raw+meta SHA1 of parent
/// </summary>
public byte[]? ParentSHA1 { get; set; } = new byte[20];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[]? ParentSHA1 = new byte[20];
/// <summary>
/// Raw data SHA1
/// </summary>
public byte[]? RawSHA1 { get; set; } = new byte[20];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[]? RawSHA1 = new byte[20];
}
}

View File

@@ -1,12 +1,15 @@
namespace SabreTools.Models.CHD
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, CharSet = CharSet.Unicode)]
public class HeaderV5 : Header
{
/// <summary>
/// Which custom compressors are used?
/// </summary>
public uint[] Compressors { get; set; } = new uint[4];
public CodecType[] Compressors { get; set; } = new CodecType[4];
/// <summary>
/// Logical size of the data (in bytes)

View File

@@ -0,0 +1,39 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.cpp"/>
[StructLayout(LayoutKind.Sequential)]
public sealed class MetadataEntry
{
/// <summary>
/// Offset within the file of the header
/// </summary>
public ulong Offset;
/// <summary>
/// Offset within the file of the next header
/// </summary>
public ulong Next;
/// <summary>
/// Offset within the file of the previous header
/// </summary>
public ulong Prev;
/// <summary>
/// Length of the metadata
/// </summary>
public uint Length;
/// <summary>
/// Metadata tag
/// </summary>
public MetadataTag Metatag;
/// <summary>
/// Flag bits
/// </summary>
public MetadataFlags Flags;
}
}

View File

@@ -0,0 +1,20 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.CHD
{
/// <see href="https://github.com/mamedev/mame/blob/master/src/lib/util/chd.cpp"/>
[StructLayout(LayoutKind.Sequential)]
public sealed class MetadataHash
{
/// <summary>
/// Tag of the metadata in big-endian
/// </summary>
public MetadataTag Tag;
/// <summary>
/// Hash data
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public byte[]? SHA1;
}
}

View File

@@ -6,12 +6,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>name</remarks>
[Required]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -13,12 +13,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>default</remarks>
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -16,12 +16,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>clock, Numeric?</remarks>
public string? Clock { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -47,12 +47,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>forcepacking</remarks>
public string? ForcePacking { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -12,12 +12,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>default, (yes|no) "no"</remarks>
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -21,12 +21,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>flags</remarks>
public string? Flags { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -18,12 +18,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>blit, (plain|dirty)</remarks>
public string? Blit { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -76,12 +76,5 @@ namespace SabreTools.Models.ClrMamePro
public Driver? Driver { get; set; }
#endregion
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -22,12 +22,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>service, (yes|no) "no"</remarks>
public string? Service { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -18,12 +18,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>spamsum</remarks>
public string? SpamSum { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -7,12 +7,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>game, machine, resource, set</remarks>
public GameBase?[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -19,12 +19,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>default</remarks>
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -87,12 +87,5 @@ namespace SabreTools.Models.ClrMamePro
public string? MIA { get; set; }
#endregion
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -6,12 +6,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>name</remarks>
[Required]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -6,12 +6,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>channels, Numeric?</remarks>
[Required]
public string? Channels { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -25,12 +25,5 @@ namespace SabreTools.Models.ClrMamePro
/// <remarks>freq, Numeric?</remarks>
public string? Freq { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -8,7 +8,7 @@ namespace SabreTools.Models.Compression.LZ
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 byte[] MagicBytes = [0x53, 0x5a, 0x44, 0x44, 0x88, 0xf0, 0x27, 0x33];
public static readonly string MagicString = System.Text.Encoding.ASCII.GetString(MagicBytes);

View File

@@ -33,56 +33,56 @@ namespace SabreTools.Models.Compression.MSZIP
/// <summary>
/// Order of the bit length code lengths
/// </summary>
public static readonly byte[] BitLengthOrder = new byte[]
{
public static readonly byte[] BitLengthOrder =
[
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[]
{
public static readonly ushort[] CopyLengths =
[
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[]
{
public static readonly ushort[] LiteralExtraBits =
[
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[]
{
public static readonly ushort[] CopyOffsets =
[
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[]
{
public static readonly ushort[] DistanceExtraBits =
[
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]
{
public static readonly ushort[] BitMasks =
[
0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
};
];
#endregion
}

View File

@@ -3,48 +3,48 @@ namespace SabreTools.Models.Compression.Quantum
/// <see href="www.russotto.net/quantumcomp.html"/>
public static class Constants
{
public static readonly int[] PositionSlot = new int[]
{
public static readonly int[] PositionSlot =
[
0x00000, 0x00001, 0x00002, 0x00003, 0x00004, 0x00006, 0x00008, 0x0000c,
0x00010, 0x00018, 0x00020, 0x00030, 0x00040, 0x00060, 0x00080, 0x000c0,
0x00100, 0x00180, 0x00200, 0x00300, 0x00400, 0x00600, 0x00800, 0x00c00,
0x01000, 0x01800, 0x02000, 0x03000, 0x04000, 0x06000, 0x08000, 0x0c000,
0x10000, 0x18000, 0x20000, 0x30000, 0x40000, 0x60000, 0x80000, 0xc0000,
0x100000, 0x180000
};
];
public static readonly int[] PositionExtraBits = new int[]
{
public static readonly int[] PositionExtraBits =
[
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, 14, 14,
15, 15, 16, 16, 17, 17, 18, 18,
19, 19
};
];
public static readonly int[] LengthSlot = new int[]
{
public static readonly int[] LengthSlot =
[
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x08,
0x0a, 0x0c, 0x0e, 0x12, 0x16, 0x1a, 0x1e, 0x26,
0x2e, 0x36, 0x3e, 0x4e, 0x5e, 0x6e, 0x7e, 0x9e,
0xbe, 0xde, 0xfe
};
];
public static readonly int[] LengthExtraBits = new int[]
{
public static readonly int[] LengthExtraBits =
[
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
};
];
/// <summary>
/// Number of position slots for (tsize - 10)
/// </summary>
public static readonly int[] NumPositionSlots = new int[]
{
public static readonly int[] NumPositionSlots =
[
20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42
};
];
}
}

View File

@@ -23,12 +23,5 @@ namespace SabreTools.Models.DosCenter
/// <remarks>comment</remarks>
public string? Comment { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -17,12 +17,5 @@ namespace SabreTools.Models.DosCenter
/// <remarks>date, attribute</remarks>
public string? Date { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,12 +9,5 @@ namespace SabreTools.Models.DosCenter
/// <remarks>file</remarks>
public File[]? File { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -7,12 +7,5 @@ namespace SabreTools.Models.DosCenter
/// <remarks>game</remarks>
public Game[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -21,12 +21,5 @@ namespace SabreTools.Models.EverdriveSMDB
public string? CRC32 { get; set; }
public string? Size { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -0,0 +1,32 @@
namespace SabreTools.Models.GameHeader
{
/// <summary>
/// File Data section for all files
/// </summary>
public sealed class FileData
{
public string? System { get; set; }
public string? Path { get; set; }
public string? Archive { get; set; }
public string? File { get; set; }
public string? BitSize { get; set; }
public long SizeBytes { get; set; }
// Hex string, no prefix
public string? CRC32 { get; set; }
// Hex string, no prefix
public string? MD5 { get; set; }
// Hex string, no prefix
public string? SHA1 { get; set; }
// Hex string, no prefix
public string? SHA256 { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
namespace SabreTools.Models.GameHeader
{
/// <summary>
/// Encrypted Data section for an NDS cart image
/// </summary>
public sealed class NitroEncryptedData
{
public ushort EncryptedSecure { get; set; }
// Hex string, no prefix
public string? EncryptedCRC32 { get; set; }
// Hex string, no prefix
public string? EncryptedMD5 { get; set; }
// Hex string, no prefix
public string? EncryptedSHA1 { get; set; }
// Hex string, no prefix
public string? EncryptedSHA256 { get; set; }
}
}

View File

@@ -0,0 +1,202 @@
namespace SabreTools.Models.GameHeader
{
/// <summary>
/// Header Data section for an NDS cart image
/// </summary>
public sealed class NitroHeaderData
{
public string? GameTitle { get; set; }
public string? GameSerial { get; set; }
public string? MakerCode { get; set; }
public byte UnitCode { get; set; }
public byte EncryptionSeed { get; set; }
public byte DeviceSize { get; set; }
public string? DeviceSizeInfo { get; set; }
public byte AsianRegion { get; set; }
// Hex string, prefixed
public string? Reserved1 { get; set; }
public byte Version { get; set; }
public string? VersionInfo { get; set; }
public byte Autostart { get; set; }
public string? AutostartInfo { get; set; }
public uint ARM9ROMOffset { get; set; }
public uint ARM9EntryAddress { get; set; }
public uint ARM9RAMOffset { get; set; }
public uint ARM7ROMOffset { get; set; }
public uint ARM7EntryAddress { get; set; }
public uint ARM7RAMOffset { get; set; }
public uint FNTOffset { get; set; }
public uint FNTSize { get; set; }
public uint FATOffset { get; set; }
public uint FATSize { get; set; }
public uint ARM9OverlayOffset { get; set; }
public uint ARM9OverlaySize { get; set; }
public uint ARM7OverlayOffset { get; set; }
public uint ARM7OverlaySize { get; set; }
public uint NormalCMDSetting { get; set; }
public uint Key1CMDSetting { get; set; }
public uint IconAddress { get; set; }
public ushort SecureCRC16 { get; set; }
public string? SecureCRC16Info { get; set; }
public ushort SecureTimeout { get; set; }
public uint ARM9AutoloadAddress { get; set; }
public uint ARM7AutoloadAddress { get; set; }
public ulong SecureDisable { get; set; }
public uint UsedRomSize { get; set; }
public string? UsedRomSizeInfo { get; set; }
public uint HeaderSize { get; set; }
public string? HeaderSizeInfo { get; set; }
// Hex string, no prefix
public string? Reserved2 { get; set; }
// Hex string, no prefix
public string? NintendoLogo { get; set; }
public ushort LogoCRC16 { get; set; }
public string? LogoCRC16Info { get; set; }
public ushort HeaderCRC16 { get; set; }
public string? HeaderCRC16Info { get; set; }
// Hex string, prefixed
public string? Reserved3 { get; set; }
// Hex string, prefixed
public string? ConfigSettings { get; set; }
public uint DsiRegionMask { get; set; }
public uint AccessControl { get; set; }
public uint ARM7SCFG { get; set; }
public uint DSiAppFlags { get; set; }
public uint DSi9RomOffset { get; set; }
public uint DSi9EntryAddress { get; set; }
public uint DSi9RamAddress { get; set; }
public uint DSi9Size { get; set; }
public uint DSi7RomOffset { get; set; }
public uint DSi7EntryAddress { get; set; }
public uint DSi7RamAddress { get; set; }
public uint DSi7Size { get; set; }
public uint DigestNTROffset { get; set; }
public uint DigestNTRSize { get; set; }
public uint DigestTWLOffset { get; set; }
public uint DigestTWLSize { get; set; }
public uint DigestSectorHashTableOffset { get; set; }
public uint DigestSectorHashTableSize { get; set; }
public uint DigestBlockHashTableOffset { get; set; }
public uint DigestBlockHashTableLength { get; set; }
public uint DigestSectorSize { get; set; }
public uint DigestBlockSectorCount { get; set; }
// Hex string, prefixed
public string? Reserved4 { get; set; }
public uint Modcrypt1Offset { get; set; }
public uint Modcrypt1Size { get; set; }
public uint Modcrypt2Offset { get; set; }
public uint Modcrypt2Size { get; set; }
public ulong TitleID { get; set; }
// Hex string, prefixed
public string? Reserved5 { get; set; }
// Hex string, prefixed
public string? ARM9SHA1HMAC { get; set; }
// Hex string, prefixed
public string? ARM7SHA1HMAC { get; set; }
// Hex string, prefixed
public string? DigestMasterSHA1HMAC { get; set; }
// Hex string, prefixed
public string? BannerSHA1HMAC { get; set; }
// Hex string, prefixed
public string? ARM9iSHA1HMAC { get; set; }
// Hex string, prefixed
public string? ARM7iSHA1HMAC { get; set; }
// Hex string, prefixed
public string? Reserved6 { get; set; }
// Hex string, prefixed
public string? UnknownHash { get; set; }
// Hex string, prefixed
public string? Reserved7 { get; set; }
// Hex string, prefixed
public string? Reserved8 { get; set; }
// Hex string, prefixed
public string? RSASignature { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
namespace SabreTools.Models.GameHeader
{
/// <summary>
/// Icon/Title Data section for an NDS cart image
/// </summary>
public sealed class NitroIconTitleData
{
public ushort IconVersion { get; set; }
public ushort IconCRC16 { get; set; }
public string? IconCRCInfo { get; set; }
public string? JapaneseTitle { get; set; }
public string? EnglishTitle { get; set; }
public string? FrenchTitle { get; set; }
public string? GermanTitle { get; set; }
public string? SpanishTitle { get; set; }
public string? ItalianTitle { get; set; }
}
}

View File

@@ -5,6 +5,10 @@ namespace SabreTools.Models.Hashfile
{
public SFV[]? SFV { get; set; }
public MD2[]? MD2 { get; set; }
public MD4[]? MD4 { get; set; }
public MD5[]? MD5 { get; set; }
public SHA1[]? SHA1 { get; set; }
@@ -16,12 +20,5 @@ namespace SabreTools.Models.Hashfile
public SHA512[]? SHA512 { get; set; }
public SpamSum[]? SpamSum { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -0,0 +1,14 @@
namespace SabreTools.Models.Hashfile
{
/// <summary>
/// MD2 File
/// </summary>
public class MD2
{
[Required]
public string? Hash { get; set; }
[Required]
public string? File { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
namespace SabreTools.Models.Hashfile
{
/// <summary>
/// MD4 File
/// </summary>
public class MD4
{
[Required]
public string? Hash { get; set; }
[Required]
public string? File { get; set; }
}
}

View File

@@ -31,19 +31,19 @@ namespace SabreTools.Models.InstallShieldCabinet
public string? DisplayName { get; set; }
/// <summary>
/// Reserved
/// Component status
/// </summary>
public ushort Reserved0 { get; set; }
public ComponentStatus Status { get; set; }
/// <summary>
/// Reserved offset
/// Offset to the password
/// </summary>
public uint ReservedOffset0 { get; set; }
public uint PasswordOffset { get; set; }
/// <summary>
/// Reserved offset
/// Misc offset
/// </summary>
public uint ReservedOffset1 { get; set; }
public uint MiscOffset { get; set; }
/// <summary>
/// Component index
@@ -61,25 +61,24 @@ namespace SabreTools.Models.InstallShieldCabinet
public string? Name { get; set; }
/// <summary>
/// Reserved offset
/// Offset to the CD-ROM folder
/// </summary>
public uint ReservedOffset2 { get; set; }
public uint CDRomFolderOffset { get; set; }
/// <summary>
/// Reserved offset
/// Offset to the HTTP location
/// </summary>
public uint ReservedOffset3 { get; set; }
public uint HTTPLocationOffset { get; set; }
/// <summary>
/// Reserved offset
/// Offset to the FTP location
/// </summary>
public uint ReservedOffset4 { get; set; }
public uint FTPLocationOffset { get; set; }
/// <summary>
/// Reserved
/// Unknown GUIDs
/// </summary>
/// <remarks>32 bytes</remarks>
public byte[]? Reserved1 { get; set; }
public Guid[]? Guid { get; set; } = new Guid[2];
/// <summary>
/// Offset to the component CLSID
@@ -94,7 +93,7 @@ namespace SabreTools.Models.InstallShieldCabinet
/// <summary>
/// Reserved
/// </summary>
/// <remarks>28 bytes</remarks>
/// <remarks>28 bytes, see CompAttrs</remarks>
public byte[]? Reserved2 { get; set; }
/// <summary>
@@ -154,23 +153,23 @@ namespace SabreTools.Models.InstallShieldCabinet
public uint NextComponentOffset { get; set; }
/// <summary>
/// Reserved offset
/// Offset to on installing text
/// </summary>
public uint ReservedOffset5 { get; set; }
public uint OnInstallingOffset { get; set; }
/// <summary>
/// Reserved offset
/// Offset to on installed text
/// </summary>
public uint ReservedOffset6 { get; set; }
public uint OnInstalledOffset { get; set; }
/// <summary>
/// Reserved offset
/// Offset to on uninstalling text
/// </summary>
public uint ReservedOffset7 { get; set; }
public uint OnUninstallingOffset { get; set; }
/// <summary>
/// Reserved offset
/// Offset to on uninstalled text
/// </summary>
public uint ReservedOffset8 { get; set; }
public uint OnUninstalledOffset { get; set; }
}
}

View File

@@ -2,7 +2,7 @@ namespace SabreTools.Models.InstallShieldCabinet
{
public static class Constants
{
public static readonly byte[] SignatureBytes = new byte[] { 0x49, 0x53, 0x63, 0x28 };
public static readonly byte[] SignatureBytes = [0x49, 0x53, 0x63, 0x28];
public const string SignatureString = "ISc(";

View File

@@ -2,6 +2,26 @@ using System;
namespace SabreTools.Models.InstallShieldCabinet
{
/// <remarks>i6comp02</remarks>
[Flags]
public enum ComponentStatus : ushort
{
/// <summary>
/// Critical
/// </summary>
COMP_STAT_CRITICAL = 0x01,
/// <summary>
/// Recommended
/// </summary>
COMP_STAT_RECOMMEND = 0x02,
/// <summary>
/// Standard
/// </summary>
COMP_STAT_STANDARD = 0x04,
}
/// <see href="https://github.com/twogood/unshield/blob/main/lib/cabfile.h"/>
[Flags]
public enum FileFlags : ushort
@@ -12,6 +32,66 @@ namespace SabreTools.Models.InstallShieldCabinet
FILE_INVALID = 8,
}
/// <remarks>i6comp02</remarks>
[Flags]
public enum FileGroupAttributes : ushort
{
/// <summary>
/// Shared
/// </summary>
FGATTR_SHARED = 0x01,
/// <summary>
/// Encrypted
/// </summary>
FGATTR_ENCRYPTED = 0x02,
/// <summary>
/// Compressed
/// </summary>
FGATTR_COMPRESSED = 0x04,
/// <summary>
/// Self-Registering
/// </summary>
FGATTR_SELFREGISTER = 0x10,
/// <summary>
/// Potentially locked
/// </summary>
FGATTR_LOCKED = 0x20,
/// <summary>
/// Uninstall
/// </summary>
FGATTR_UNINSTALL = 0x40,
}
/// <remarks>i6comp02</remarks>
[Flags]
public enum FileGroupFlags : uint
{
/// <summary>
/// Always overwrite
/// </summary>
FGDESC_ALWAYS_OVERWRITE = 0x001,
/// <summary>
/// Never overwrite
/// </summary>
FGDESC_NEVER_OVERWRITE = 0x002,
/// <summary>
/// Overwrite if newer date
/// </summary>
FGDESC_NEWER_DATE = 0x020,
/// <summary>
/// Overwrite if newer version
/// </summary>
FGDESC_NEWER_VERSION = 0x200,
}
/// <see href="https://github.com/twogood/unshield/blob/main/lib/cabfile.h"/>
public enum LinkFlags : byte
{

View File

@@ -1,6 +1,7 @@
namespace SabreTools.Models.InstallShieldCabinet
{
/// <see href="https://github.com/twogood/unshield/blob/main/lib/libunshield.h"/>
/// <remarks>Additional info from i6comp02</remarks>
public sealed class FileGroup
{
/// <summary>
@@ -18,35 +19,15 @@ namespace SabreTools.Models.InstallShieldCabinet
/// </summary>
public uint ExpandedSize { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved0 { get; set; }
/// <summary>
/// Size of the compressed data
/// </summary>
public uint CompressedSize { get; set; }
/// <summary>
/// Reserved
/// Attributes (junk2)
/// </summary>
public byte[]? Reserved1 { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved2 { get; set; }
/// <summary>
/// Attribute(?)
/// </summary>
public ushort Attribute1 { get; set; }
/// <summary>
/// Attribute(?)
/// </summary>
public ushort Attribute2 { get; set; }
public FileGroupAttributes Attributes { get; set; }
/// <summary>
/// Index of the first file
@@ -59,19 +40,19 @@ namespace SabreTools.Models.InstallShieldCabinet
public uint LastFile { get; set; }
/// <summary>
/// Unknown offset(?)
/// Unknown string offset
/// </summary>
public uint UnknownOffset { get; set; }
public uint UnknownStringOffset { get; set; }
/// <summary>
/// Var 4 offset(?)
/// Offset to the operating system (Var4)
/// </summary>
public uint Var4Offset { get; set; }
public uint OperatingSystemOffset { get; set; }
/// <summary>
/// Var 1 offset(?)
/// Offset to the language (Var1)
/// </summary>
public uint Var1Offset { get; set; }
public uint LanguageOffset { get; set; }
/// <summary>
/// Offset to the HTTP location
@@ -84,43 +65,23 @@ namespace SabreTools.Models.InstallShieldCabinet
public uint FTPLocationOffset { get; set; }
/// <summary>
/// Misc offset(?)
/// 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
/// Overwrite setting flags
/// </summary>
public byte[]? Reserved3 { get; set; }
public FileGroupFlags OverwriteFlags { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved4 { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved5 { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved6 { get; set; }
/// <summary>
/// Reserved
/// </summary>
public byte[]? Reserved7 { get; set; }
public uint[]? Reserved { get; set; } = new uint[4];
}
}

View File

@@ -2,17 +2,17 @@ namespace SabreTools.Models.LinearExecutable
{
public static class Constants
{
public static readonly byte[] DebugInformationSignatureBytes = new byte[] { 0x4e, 0x42, 0x30 };
public static readonly byte[] DebugInformationSignatureBytes = [0x4e, 0x42, 0x30];
public const string DebugInformationSignatureString = "NB0";
public static readonly byte[] LESignatureBytes = new byte[] { 0x4c, 0x45 };
public static readonly byte[] LESignatureBytes = [0x4c, 0x45];
public const string LESignatureString = "LE";
public const ushort LESignatureUInt16 = 0x454c;
public static readonly byte[] LXSignatureBytes = new byte[] { 0x4c, 0x58 };
public static readonly byte[] LXSignatureBytes = [0x4c, 0x58];
public const string LXSignatureString = "LX";

View File

@@ -3,12 +3,5 @@ namespace SabreTools.Models.Listrom
public class MetadataFile
{
public Set[]? Set { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
public string[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -16,17 +16,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("condition")]
public Condition? Condition { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,17 +9,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("mask")]
public string? Mask { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -17,17 +17,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("default")]
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -24,17 +24,5 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("clock")]
public string? Clock { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -22,17 +22,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("value")]
public string? Value { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -18,17 +18,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("inverted")]
public string? Inverted { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -20,17 +20,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("condition")]
public Condition? Condition { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -25,17 +25,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("confsetting")]
public ConfSetting[]? ConfSetting { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -54,17 +54,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric?</remarks>
[XmlAttribute("ways3")]
public string? Ways3 { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -28,17 +28,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("extension")]
public Extension[]? Extension { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,17 +9,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("name")]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -18,17 +18,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("inverted")]
public string? Inverted { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -25,17 +25,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("dipvalue")]
public DipValue[]? DipValue { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -20,17 +20,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("condition")]
public Condition? Condition { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -38,17 +38,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("optional")]
public string? Optional { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -62,17 +62,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric</remarks>
[XmlAttribute("vbstart")]
public string? VBStart { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -53,17 +53,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("incomplete")]
public string? Incomplete { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,17 +9,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("name")]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -18,17 +18,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(unemulated|imperfect)</remarks>
[XmlAttribute("overall")]
public string? Overall { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -115,17 +115,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("ramoption")]
public RamOption[]? RamOption { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -33,17 +33,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("control")]
public Control[]? Control { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -13,17 +13,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("briefname")]
public string? BriefName { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -12,17 +12,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("machine", typeof(Machine))]
[XmlElement("game", typeof(Game))]
public GameBase[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -20,17 +20,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("machine", typeof(Machine))]
[XmlElement("game", typeof(Game))]
public GameBase[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -12,17 +12,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("analog")]
public Analog[]? Analog { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -15,17 +15,5 @@ namespace SabreTools.Models.Listxml
[XmlText]
public string? Content { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -49,17 +49,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no", Only present in older versions</remarks>
[XmlAttribute("soundonly")]
public string? SoundOnly { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,17 +9,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("name")]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -12,17 +12,5 @@ namespace SabreTools.Models.Listxml
[XmlElement("slotoption")]
public SlotOption[]? SlotOption { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -17,17 +17,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("default")]
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -21,17 +21,5 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("filter")]
public string? Filter { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -10,17 +10,5 @@ namespace SabreTools.Models.Listxml
[Required]
[XmlAttribute("channels")]
public string? Channels { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -35,17 +35,5 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric</remarks>
[XmlAttribute("refresh")]
public string? Refresh { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,17 +9,5 @@ namespace SabreTools.Models.Logiqx
[Required]
[XmlAttribute("name")]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -17,17 +17,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("default")]
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -20,17 +20,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>(zip|unzip) "zip"</remarks>
[XmlAttribute("forcepacking")]
public string? ForcePacking { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -27,17 +27,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>RomVault extension</remarks>
[XmlElement("dir")]
public Dir[]? Dir { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -9,17 +9,5 @@ namespace SabreTools.Models.Logiqx
[Required]
[XmlAttribute("name")]
public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -13,17 +13,5 @@ namespace SabreTools.Models.Logiqx
[XmlElement("game", typeof(Game))]
[XmlElement("machine", typeof(Machine))]
public GameBase[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -26,17 +26,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>MAME extension</remarks>
[XmlAttribute("region")]
public string? Region { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -41,17 +41,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("incomplete")]
public string? Incomplete { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -111,17 +111,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>MAME extension</remarks>
[XmlElement("softwarelist")]
public SoftwareList[]? SoftwareList { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -57,17 +57,5 @@ namespace SabreTools.Models.Logiqx
[XmlElement("romcenter")]
public RomCenter? RomCenter { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -21,17 +21,5 @@ namespace SabreTools.Models.Logiqx
[XmlAttribute("spamsum")]
public string? SpamSum { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

View File

@@ -23,17 +23,5 @@ namespace SabreTools.Models.Logiqx
/// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("default")]
public string? Default { get; set; }
#region DO NOT USE IN PRODUCTION
/// <remarks>Should be empty</remarks>
[XmlAnyAttribute]
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
/// <remarks>Should be empty</remarks>
[XmlAnyElement]
public object[]? ADDITIONAL_ELEMENTS { get; set; }
#endregion
}
}

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