resource_fork/structs.rs
1// See https://developer.apple.com/library/archive/documentation/mac/pdf/MoreMacintoshToolbox.pdf#page=151
2#[derive(binrw::BinRead, Debug)]
3#[br(big)]
4pub struct ResourceHeader {
5 /// Offset from beginning of resource fork to resource data
6 pub resource_data_offset: u32,
7 /// Offset from beginning of resource fork to resource map
8 pub resource_map_offset: u32,
9 /// Length of resource data
10 pub resource_data_len: u32,
11 /// Length of resource map
12 pub resource_map_len: u32,
13}
14
15#[derive(binrw::BinRead, Debug)]
16#[br(big)]
17pub struct SingleResourceEntry {
18 /// Length of following resource data
19 pub length: u32,
20 /// Resource data for this resource
21 #[br(count(length))]
22 pub data: Vec<u8>,
23}
24
25#[derive(binrw::BinRead, Debug)]
26#[br(big)]
27pub struct ResourceMap {
28 /// Reserved for copy of resource header
29 pub reserved_header: [u8; 16],
30 /// Reserved for handle to next resource map
31 pub reserved_handle: u32,
32 /// Reserved for file reference number
33 pub reserved_file_reference: u16,
34 // Resource fork attributes
35 pub attributes: u16,
36 /// Offset from beginning of map to resource type list
37 pub type_list_offset: u16,
38 /// Offset from beginning of map to resource name list
39 pub name_list_offset: u16,
40 /// Number of types in the map minus 1
41 pub last_type_index: u16,
42}
43
44#[derive(binrw::BinRead, Debug)]
45#[br(big)]
46pub struct TypeMapItem {
47 /// Resource type
48 pub resource_type: macintosh_utils::FourCC,
49 /// Number of resources of this type in map minus 1
50 pub last_resource_index: u16,
51 /// Offset from beginning of resource type list to reference list of this type
52 pub reference_list_offset: u16,
53}
54
55#[derive(binrw::BinRead, Debug)]
56#[br(big)]
57pub struct ReferenceListItem {
58 /// Resource ID
59 pub resource_id: i16,
60 /// Offset from beginning of resource name list to resource name
61 pub resource_name_offset: i16,
62 /// Resource attributes
63 pub attributes: u8,
64 /// Offset from beginning of resource data to data of this resource
65 #[br(map(|[b0, b1, b2]:[u8;3]| (b0 as u32) << 16 | (b1 as u32) << 8 | (b2 as u32)))]
66 pub resource_data_offset: u32,
67 /// Reserved for handle to resource
68 pub reserved_handle: u32,
69}
70
71#[derive(binrw::BinRead, Debug)]
72#[br(big)]
73pub struct ResourceListItem {
74 /// Length of following resource name
75 pub name_len: u8,
76 /// Characters of resource name
77 #[br(count(name_len))]
78 pub name_bytes: Vec<u8>,
79}