1// ResourcesDefs.h
2
3#ifndef RESOURCES_DEFS_H
4#define RESOURCES_DEFS_H
5
6#include <SupportDefs.h>
7
8// x86 resource file constants
9const char		kX86ResourceFileMagic[4]		= { 'R', 'S', 0, 0 };
10const uint32	kX86ResourcesOffset				= 0x00000004;
11
12// PPC resource file constants
13const char		kPPCResourceFileMagic[4]		= { 'r', 'e', 's', 'f' };
14const uint32	kPPCResourcesOffset				= 0x00000028;
15
16// ELF file related constants
17const uint32	kELFMinResourceAlignment		= 32;
18
19// the unused data pattern
20const uint32	kUnusedResourceDataPattern[3]	= {
21	0xffffffff, 0x000003e9, 0x00000000
22};
23
24
25// the resources header
26struct resources_header {
27	uint32	rh_resources_magic;
28	uint32	rh_resource_count;
29	uint32	rh_index_section_offset;
30	uint32	rh_admin_section_size;
31	uint32	rh_pad[13];
32};
33
34const uint32	kResourcesHeaderMagic			= 0x444f1000;
35const uint32	kResourceIndexSectionOffset		= 0x00000044;
36const uint32	kResourceIndexSectionAlignment	= 0x00000600;
37const uint32	kResourcesHeaderSize			= 68;
38
39
40// the header of the index section
41struct resource_index_section_header {
42	uint32	rish_index_section_offset;
43	uint32	rish_index_section_size;
44	uint32	rish_unused_data1;
45	uint32	rish_unknown_section_offset;
46	uint32	rish_unknown_section_size;
47	uint32	rish_unused_data2[25];
48	uint32	rish_info_table_offset;
49	uint32	rish_info_table_size;
50	uint32	rish_unused_data3;
51};
52
53const uint32	kUnknownResourceSectionSize		= 0x00000168;
54const uint32	kResourceIndexSectionHeaderSize	= 132;
55
56
57// an entry of the index table
58struct resource_index_entry {
59	uint32	rie_offset;
60	uint32	rie_size;
61	uint32	rie_pad;
62};
63
64const uint32	kResourceIndexEntrySize			= 12;
65
66
67// a resource info
68struct resource_info {
69	int32	ri_id;
70	int32	ri_index;
71	uint16	ri_name_size;
72	char	ri_name[1];
73};
74
75const uint32	kMinResourceInfoSize			= 10;
76
77
78// a resource info block
79struct resource_info_block {
80	type_code		rib_type;
81	resource_info	rib_info[1];
82};
83
84const uint32	kMinResourceInfoBlockSize		= 4 + kMinResourceInfoSize;
85
86
87// the structure separating resource info blocks
88struct resource_info_separator {
89	uint32	ris_value1;
90	uint32	ris_value2;
91};
92
93const uint32	kResourceInfoSeparatorSize		= 8;
94
95
96// the end of the info table
97struct resource_info_table_end {
98	uint32	rite_check_sum;
99	uint32	rite_terminator;
100};
101
102const uint32	kResourceInfoTableEndSize		= 8;
103
104
105#endif	// RESOURCES_DEFS_H
106