1use fancy_slice::FancySlice;
2
3#[rustfmt::skip]
5pub(crate) fn resources(data: FancySlice) -> Vec<Resource> {
6 let total_size = data.i32_be(0);
7 let num_children = data.i32_be(4);
8
9 assert_eq!(total_size, (num_children + 1) * RESOURCE_SIZE as i32 + RESOURCE_HEADER_SIZE as i32);
10
11 let mut resources = vec!();
12 for i in 1..=num_children { let child_index = RESOURCE_HEADER_SIZE + RESOURCE_SIZE * i as usize;
14
15 let string_offset = data.i32_be(child_index + 8);
16
17 resources.push(Resource {
18 _flag: data.u16_be(child_index + 0x2),
20 data_offset: data.i32_be(child_index + 0xc),
23 string: data.str(string_offset as usize).unwrap().to_string(),
24 });
25 }
26
27 resources
28}
29
30pub(crate) const RESOURCE_HEADER_SIZE: usize = 0x8;
31
32pub(crate) const RESOURCE_SIZE: usize = 0x10;
33#[derive(Clone, Debug)]
34pub struct Resource {
35 _flag: u16,
36 pub data_offset: i32,
37 pub string: String,
38}