mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-02-13 21:31:04 +00:00
88 lines
2.5 KiB
C#
88 lines
2.5 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace BinaryObjectScanner.Models.MoPaQ
|
|
{
|
|
/// <summary>
|
|
/// The HET table is present if the HetTablePos64 member of MPQ header is
|
|
/// set to nonzero. This table can fully replace hash table. Depending on
|
|
/// MPQ size, the pair of HET&BET table can be more efficient than Hash&Block
|
|
/// table. HET table can be encrypted and compressed.
|
|
/// </summary>
|
|
/// <see href="http://zezula.net/en/mpq/mpqformat.html"/>
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public sealed class HetTable
|
|
{
|
|
// TODO: Extract this out and make in common between HET and BET
|
|
#region Common Table Headers
|
|
|
|
/// <summary>
|
|
/// 'HET\x1A'
|
|
/// </summary>
|
|
public string Signature;
|
|
|
|
/// <summary>
|
|
/// Version. Seems to be always 1
|
|
/// </summary>
|
|
public uint Version;
|
|
|
|
/// <summary>
|
|
/// Size of the contained table
|
|
/// </summary>
|
|
public uint DataSize;
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Size of the entire hash table, including the header (in bytes)
|
|
/// </summary>
|
|
public uint TableSize;
|
|
|
|
/// <summary>
|
|
/// Maximum number of files in the MPQ
|
|
/// </summary>
|
|
public uint MaxFileCount;
|
|
|
|
/// <summary>
|
|
/// Size of the hash table (in bytes)
|
|
/// </summary>
|
|
public uint HashTableSize;
|
|
|
|
/// <summary>
|
|
/// Effective size of the hash entry (in bits)
|
|
/// </summary>
|
|
public uint HashEntrySize;
|
|
|
|
/// <summary>
|
|
/// Total size of file index (in bits)
|
|
/// </summary>
|
|
public uint TotalIndexSize;
|
|
|
|
/// <summary>
|
|
/// Extra bits in the file index
|
|
/// </summary>
|
|
public uint IndexSizeExtra;
|
|
|
|
/// <summary>
|
|
/// Effective size of the file index (in bits)
|
|
/// </summary>
|
|
public uint IndexSize;
|
|
|
|
/// <summary>
|
|
/// Size of the block index subtable (in bytes)
|
|
/// </summary>
|
|
public uint BlockTableSize;
|
|
|
|
/// <summary>
|
|
/// HET hash table. Each entry is 8 bits.
|
|
/// </summary>
|
|
/// <remarks>Size is derived from HashTableSize</remarks>
|
|
public byte[] HashTable;
|
|
|
|
/// <summary>
|
|
/// Array of file indexes. Bit size of each entry is taken from dwTotalIndexSize.
|
|
/// Table size is taken from dwHashTableSize.
|
|
/// </summary>
|
|
public byte[][] FileIndexes;
|
|
}
|
|
}
|