11558Srgrimes// ResourceFile.h 250476Speter 31558Srgrimes#ifndef RESOURCE_FILE_H 412481Speter#define RESOURCE_FILE_H 51558Srgrimes 641061Sbde#include <ByteOrder.h> 741061Sbde#include <List.h> 839271Sphk 939255Sgibbs#include "OffsetFile.h" 1038653Sgpalmer 1138653Sgpalmerclass Exception; 1255980Speterclass ResourceItem; 1343859Sobrienstruct MemArea; 1438653Sgpalmerstruct resource_info; 1538653Sgpalmerstruct PEFContainerHeader; 1638653Sgpalmer 1738653Sgpalmerclass ResourceFile { 1838653Sgpalmerpublic: 1938653Sgpalmer ResourceFile(); 2038653Sgpalmer virtual ~ResourceFile(); 2138653Sgpalmer 2238653Sgpalmer void Init(BFile& file); // throws Exception 2338653Sgpalmer void Unset(); 2453644Sguido status_t InitCheck() const; 2554225Sguido 2638653Sgpalmer bool AddItem(ResourceItem* item, int32 index = -1); 2754225Sguido ResourceItem* RemoveItem(int32 index); 2854225Sguido bool RemoveItem(ResourceItem* item); 2938653Sgpalmer int32 IndexOf(ResourceItem* item) const; 3038653Sgpalmer ResourceItem* ItemAt(int32 index) const; 3138653Sgpalmer int32 CountItems() const; 3238843Sjb 3338653Sgpalmer uint32 GetResourcesSize() const; 3438653Sgpalmer uint32 WriteResources(void* buffer, uint32 size); 3538653Sgpalmer void WriteTest(); 3638653Sgpalmer 3738653Sgpalmer void PrintToStream(bool longInfo = true); 3855980Speter 3938653Sgpalmerprivate: 4043557Ssemenu void _InitFile(BFile& file); 4138653Sgpalmer void _InitELFFile(BFile& file); 4238653Sgpalmer void _InitPEFFile(BFile& file, 4338653Sgpalmer const PEFContainerHeader& pefHeader); 4438653Sgpalmer void _ReadHeader(); 4538653Sgpalmer void _ReadIndex(); 4638653Sgpalmer bool _ReadIndexEntry(int32 index, 4744690Sbrian uint32 tableOffset, 4838653Sgpalmer bool peekAhead); 4938653Sgpalmer void _ReadInfoTable(); 5038653Sgpalmer bool _ReadInfoTableEnd(const void* data, 5138653Sgpalmer int32 dataSize); 5238653Sgpalmer const void* _ReadResourceInfo(const MemArea& area, 5338653Sgpalmer const resource_info* info, 5438653Sgpalmer type_code type, 5555163Sshin bool* readIndices); 5638653Sgpalmer 5738653Sgpalmer inline int16 _GetInt16(int16 value); 5838653Sgpalmer inline uint16 _GetUInt16(uint16 value); 5938653Sgpalmer inline int32 _GetInt32(int32 value); 6038653Sgpalmer inline uint32 _GetUInt32(uint32 value); 6155163Sshin 6238653Sgpalmerprivate: 6338653Sgpalmer BList fItems; 6438653Sgpalmer OffsetFile fFile; 6541061Sbde uint32 fFileType; 6638653Sgpalmer off_t fFileSize; 6746878Sobrien int32 fResourceCount; 6838653Sgpalmer ResourceItem* fInfoTableItem; 6938653Sgpalmer bool fHostEndianess; 7042117Ssos}; 7142117Ssos 7210855Sjoerg// _GetInt16 7344317Sjkhinline 7452252Sbpint16 7544317SjkhResourceFile::_GetInt16(int16 value) 7644317Sjkh{ 7738852Sjb return (fHostEndianess ? value : B_SWAP_INT16(value)); 7838852Sjb} 7938458Sjb 8038458Sjb// _GetUInt16 811558Srgrimesinline 82uint16 83ResourceFile::_GetUInt16(uint16 value) 84{ 85 return (fHostEndianess ? value : B_SWAP_INT16(value)); 86} 87 88// _GetInt32 89inline 90int32 91ResourceFile::_GetInt32(int32 value) 92{ 93 return (fHostEndianess ? value : B_SWAP_INT32(value)); 94} 95 96// _GetUInt32 97inline 98uint32 99ResourceFile::_GetUInt32(uint32 value) 100{ 101 return (fHostEndianess ? value : B_SWAP_INT32(value)); 102} 103 104 105#endif // RESOURCE_FILE_H 106