From 08ace389142621eecb1661271f15c240028d1bda Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 17 Mar 2022 00:11:54 +0100 Subject: [PATCH] patterns: Added vdf pattern --- README.md | 5 +---- patterns/vdf.hexpat | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 patterns/vdf.hexpat diff --git a/README.md b/README.md index 22c3f79..27decb5 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,7 @@ Hex patterns, include patterns and magic files for the use with the ImHex Hex Ed | Java Class | `application/x-java-applet` | `patterns/java_class.hexpat` | Java Class files | | ARM VTOR | | `patterns/arm_cm_vtor.hexpat` | ARM Cortex M Vector Table Layout | | ICO | | `patterns/ico.hexpat` | Icon (.ico) or Cursor (.cur) files | -| PNG | `image/png` | `patterns/png.hexpat` | PNG image files | -| DDS | `image/vnd-ms.dds` | `patterns/dds.hexpat` | DirectDraw Surface | -| TGA | `image/tga` | `patterns/tga.hexpat` | Truevision TGA/TARGA image | -| ISO | | `patterns/iso.hexpat` | ISO 9660 file system | +| VDF | | `patterns/vdf.hexpat` | Binary Value Data Format (.vdf) files | ### Scripts diff --git a/patterns/vdf.hexpat b/patterns/vdf.hexpat new file mode 100644 index 0000000..96ca54e --- /dev/null +++ b/patterns/vdf.hexpat @@ -0,0 +1,36 @@ +#pragma eval_depth 0x10000 + +#include +#include + +enum Type : u8 { + Set = 0x00, + String = 0x01, + Integer = 0x02, + EndSet = 0x08 +}; + +struct Entry { + Type type; + + char name[]; + + if (type == Type::Set) { + Entry entries[while (std::mem::read_unsigned($, 1) != Type::EndSet)]; + Type endSet [[hidden]]; + std::assert(endSet == Type::EndSet, "Invalid end of set byte!"); + } + else if (type == Type::Integer) + u32 value; + else if (type == Type::String) { + char value[]; + } +}; + +struct Set { + Entry entry [[inline]]; + Type endSet [[hidden]]; + std::assert(endSet == Type::EndSet, "Invalid end of set byte!"); +}; + +Set set[while (std::mem::read_unsigned($ - 1, 1) != Type::EndSet)] @ 0x00; \ No newline at end of file