1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//! Setup record parsing and iteration.
//!
//! Reads the typed record entries that follow `TSetupHeader` in the
//! decompressed `setup-0` stream. Each submodule maps to one Pascal
//! record type from `Shared.Struct.pas`. Cross-version conditionals
//! are documented per-record; the canonical reference is
//! `research-notes/04-setup-records.md`.
//!
//! [`windows`] holds the bit-packed-set helpers used by both the
//! fixed numeric tail of `TSetupHeader` and the per-record
//! `ItemBase`. [`item`] is the conditions section + version-range
//! bundle every record-with-conditions reads. The remaining modules
//! map one-to-one to Pascal record types — lightweight ones
//! ([`type_`], [`component`], [`task`], [`language`], [`message`],
//! [`permission`]) and heavier ones ([`directory`], [`mod@file`],
//! [`icon`], [`ini`], [`registry`], [`run`], [`delete`],
//! [`dataentry`], [`isssigkey`]).
use HashSet;
use Hash;
/// Decodes a bit-packed flag set: bit `i` of `raw` (LSB-first within
/// each byte) selects `table[i]`. Bits past `table.len()` are ignored;
/// trailing bytes past `raw.len()` contribute nothing.
pub