mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-28 15:57:02 -05:00
* Add `current_bit_offset()` and `read_bits(...)` to `std::mem` * Replace deprecated BitfieldOrder enum values with new clearer names This adds new options named `MostToLeastSignificant` and `LeastToMostSignificant` to replace the old `LeftToRight` and `RightToLeft` names. These names should be much clearer about what they affect and how. * Throw errors when `std::core::(get|set)_bitfield_order()` are called * Update all patterns to work with the new bitfield behaviors
79 lines
1.5 KiB
Rust
79 lines
1.5 KiB
Rust
#pragma MIME application/gzip
|
|
|
|
#include <type/time.pat>
|
|
#include <type/size.pat>
|
|
#include <std/core.pat>
|
|
#include <std/mem.pat>
|
|
|
|
using BitfieldOrder = std::core::BitfieldOrder;
|
|
|
|
bitfield Flags {
|
|
FTEXT : 1;
|
|
FHCRC : 1;
|
|
FEXTRA : 1;
|
|
FNAME : 1;
|
|
FCOMMENT : 1;
|
|
} [[bitfield_order(BitfieldOrder::LeastToMostSignificant, 8)]];
|
|
|
|
bitfield ExtraFlags {
|
|
padding : 1;
|
|
maximumCompression : 1;
|
|
fastestCompression : 1;
|
|
padding : 5;
|
|
};
|
|
|
|
enum CompressionMethod : u8 {
|
|
Reserved = 0 ... 7,
|
|
Deflate = 8
|
|
};
|
|
|
|
enum OperatingSystemID : u8 {
|
|
FATFileSystem = 0x00,
|
|
Amiga = 0x01,
|
|
VMS = 0x02,
|
|
Unix = 0x03,
|
|
VM_CMS = 0x04,
|
|
AtariTOS = 0x05,
|
|
HPFSFileSystem = 0x06,
|
|
Macintosh = 0x07,
|
|
ZSystem = 0x08,
|
|
CP_M = 0x09,
|
|
TOPS_20 = 0x0A,
|
|
NTFSFileSystem = 0x0B,
|
|
QDOS = 0x0C,
|
|
AcordRISCOS = 0x0D,
|
|
Unknown = 0xFF
|
|
};
|
|
|
|
struct GZip {
|
|
u16 signature;
|
|
CompressionMethod compressionMethod;
|
|
Flags flags;
|
|
type::time32_t modificationTime;
|
|
ExtraFlags extraFlags;
|
|
OperatingSystemID operatingSystemId;
|
|
|
|
if (flags.FEXTRA) {
|
|
u16 extraLength;
|
|
u8 extraField[extraLength];
|
|
}
|
|
|
|
if (flags.FNAME) {
|
|
char originalFileName[];
|
|
}
|
|
|
|
if (flags.FCOMMENT) {
|
|
char comment[];
|
|
}
|
|
|
|
if (flags.FHCRC) {
|
|
u16 crc16;
|
|
}
|
|
|
|
u8 data[while($ < std::mem::size() - 8)] [[sealed]];
|
|
|
|
u32 crc32;
|
|
type::Size<u32> isize;
|
|
};
|
|
|
|
GZip gzip @ 0x00; |