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