diff --git a/patterns/adts.hexpat b/patterns/adts.hexpat index 848f2cb..a87a8a8 100644 --- a/patterns/adts.hexpat +++ b/patterns/adts.hexpat @@ -1,16 +1,14 @@ -#pragma authors: zhoubo -#pragma version: 0.4 -#pragma description: Parse AAC's ADTS(Audio Data Transport Stream) audio files. -#pragma category: Audio -#pragma filemask: *.aac -#pragma IDBytes: FF F //ADTS Syncword -#pragma history: -#pragma 0.4 2024-02-12 zhoubo: Porting from 010 Editor Templates. -#pragma 0.3 2024-02-09 zhoubo: use BitfieldDisablePadding(Unpadded Bitfields) for odd header bytes(7,9 bytes) color, and remove FSeek. -#pragma 0.2 2024-02-05 zhoubo: fix some comment & color. -#pragma 0.1 2022-06-13 zhoubo: Init release. only ADTS, not support ADIF,LATM. +#pragma author zhoubo +#pragma description Parse AAC's ADTS(Audio Data Transport Stream) audio files. +#pragma magic [ FF F? ] @ 0x00 #pragma pattern_limit 0xFFFFFF +// History +// 0.4 2024-02-12 zhoubo: Porting from 010 Editor Templates. +// 0.3 2024-02-09 zhoubo: use BitfieldDisablePadding(Unpadded Bitfields) for odd header bytes(7,9 bytes) color, and remove FSeek. +// 0.2 2024-02-05 zhoubo: fix some comment & color. +// 0.1 2022-06-13 zhoubo: Init release. only ADTS, not support ADIF,LATM. + // More information available at: // 1. https://wiki.multimedia.cx/index.php?title=ADTS // 2. https://en.wikipedia.org/wiki/Advanced_Audio_Coding diff --git a/patterns/ar.hexpat b/patterns/ar.hexpat index 2549bde..9513bb1 100644 --- a/patterns/ar.hexpat +++ b/patterns/ar.hexpat @@ -23,6 +23,9 @@ struct ARFile { }; char signature[8] @ 0x00; +if (signature == "!\r") { + std::error("Archive file got corrupted due to CRLF line ending conversion!"); +} std::assert(signature == "!\n", "File is not a valid archive!"); ARFile files[while($ < std::mem::size())] @ $; diff --git a/patterns/bgcode.hexpat b/patterns/bgcode.hexpat index 9dab8d9..b539597 100644 --- a/patterns/bgcode.hexpat +++ b/patterns/bgcode.hexpat @@ -1,8 +1,8 @@ #pragma author Shadlock0133 (aka Aurora) #pragma description Binary G-Code from Prusa -#include -#include +import type.magic; +import std.mem; enum ChecksumType : u16 { None, diff --git a/patterns/dmg.hexpat b/patterns/dmg.hexpat index 2b7d600..3d513d6 100644 --- a/patterns/dmg.hexpat +++ b/patterns/dmg.hexpat @@ -11,41 +11,41 @@ import std.mem; // // UDIFResourceFile starts at size(file) - 512 struct UDIFResourceFile { - type::Magic<"koly"> Signature; // Magic ('koly') - u32 Version; // Current version is 4 - type::Size HeaderSize; // sizeof(this), always 512 + type::Magic<"koly"> Signature; // Magic ('koly') + u32 Version; // Current version is 4 + type::Size HeaderSize; // sizeof(this), always 512 u32 Flags; - u64 RunningDataForkOffset; // - u64 DataForkOffset; // Data fork offset (usually 0, beginning of file) - type::Size DataForkLength; // Size of data fork (usually up to the XMLOffset, below) - u64 RsrcForkOffset; // Resource fork offset, if any - type::Size RsrcForkLength; // Resource fork length, if any - u32 SegmentNumber; // Usually 1, may be 0 - u32 SegmentCount; // Usually 1, may be 0 - type::GUID SegmentID; // 128-bit GUID identifier of segment (if SegmentNumber !=0) - + u64 RunningDataForkOffset; // + u64 DataForkOffset; // Data fork offset (usually 0, beginning of file) + type::Size DataForkLength; // Size of data fork (usually up to the XMLOffset, below) + u64 RsrcForkOffset; // Resource fork offset, if any + type::Size RsrcForkLength; // Resource fork length, if any + u32 SegmentNumber; // Usually 1, may be 0 + u32 SegmentCount; // Usually 1, may be 0 - u32 DataChecksumType; // Data fork + type::GUID SegmentID; // 128-bit GUID identifier of segment (if SegmentNumber !=0) + + u32 DataChecksumType; // Data fork type::Size DataChecksumSize; // Checksum Information - u32 DataChecksum[DataChecksumSize]; // Up to 128-bytes (32 x 4) of checksum + u32 DataChecksum[32]; // Up to 128-bytes (32 x 4) of checksum - u64 XMLOffset; // Offset of property list in DMG, from beginning - type::Size XMLLength; // Length of property list - u8 Reserved1[120]; // 120 reserved bytes - zeroed + u64 XMLOffset; // Offset of property list in DMG, from beginning + type::Size XMLLength; // Length of property list + u8 Reserved1[120]; // 120 reserved bytes - zeroed - u32 ChecksumType; // Master - type::Size ChecksumSize; // Checksum information - u32 Checksum[ChecksumSize]; // Up to 128-bytes (32 x 4) of checksum + u32 ChecksumType; // Master + type::Size ChecksumSize; // Checksum information + u32 Checksum[32]; // Up to 128-bytes (32 x 4) of checksum - u32 ImageVariant; // Commonly 1 - u64 SectorCount; // Size of DMG when expanded, in sectors + u32 ImageVariant; // Commonly 1 + u64 SectorCount; // Size of DMG when expanded, in sectors - u32 reserved2; // 0 - u32 reserved3; // 0 - u32 reserved4; // 0 + u32 reserved2; // 0 + u32 reserved3; // 0 + u32 reserved4; // 0 }; UDIFResourceFile trailer @ std::mem::size() - 512; -char metadata_plist[trailer.XMLLength] @ trailer.XMLOffset; +char metadata_plist[trailer.XMLLength] @ trailer.XMLOffset; \ No newline at end of file diff --git a/tests/patterns/test_data/bgcode.hexpat.bgcode b/tests/patterns/test_data/bgcode.hexpat.bgcode new file mode 100644 index 0000000..6e33c73 Binary files /dev/null and b/tests/patterns/test_data/bgcode.hexpat.bgcode differ diff --git a/tests/patterns/test_data/dmg.hexpat.dmg b/tests/patterns/test_data/dmg.hexpat.dmg new file mode 100644 index 0000000..bb9a3d1 Binary files /dev/null and b/tests/patterns/test_data/dmg.hexpat.dmg differ