// E32ROM.H
//
// Copyright (c) 1995-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__E32ROM_H__)
#define __E32ROM_H__
#if !defined(__E32STD_H__)
#include <e32std.h>
#endif
//
#if defined(__BIG_ENDIAN__)
const TUint KRomHeaderLinAddr=0x00200000;
#elif defined(__SINGLE__)
const TUint KRomHeaderLinAddr=0x00000000;
#else
const TUint KRomHeaderLinAddr=0x50000000;
#endif
const TUint KRomHeaderSize=0x100;
//
typedef TUint32 TLinAddr;
//
class TRomHeader
	{
public:
	TUint8 iJump[128];
	TVersion iVersion;
	TTime iTime;
	TLinAddr iRomBase;
	TUint32 iRomSize;
	TLinAddr iRomRootDirectoryList;
	TLinAddr iKernDataAddress;
	TLinAddr iKernStackAddress;
	TLinAddr iPrimaryFile;
	TLinAddr iSecondaryFile;
	TUint iCheckSum;
	TInt64 iLanguage;
	TUint32 iHardware;
	TSize iScreenSize;
	TInt iScreenBitsPerPixel;
	TLinAddr iRomSectionHeader;
	TInt iTotalSvDataSize;
	TLinAddr iVariantFile;
	TLinAddr iExtensionFile;
	TUint32 iPad[32-21]; // sizeof(TRomHeader)=256
	};

class TRootDirInfo
	{
public:
	TUint iHardwareVariant;
	TLinAddr iAddressLin;
	};

class TRomRootDirectoryList
	{
public:
	TInt iNumRootDirs;
	TRootDirInfo iRootDir[1];
	};

class TRomSectionHeader
	{
public:
	TVersion iVersion;
	TTime iTime;
	TInt64 iLanguage;
	TUint iCheckSum;
	};
//
class TRomEntry
	{
public:
	TInt iSize;
	TUint32 iAddressLin;
	TUint8 iAtt;
	TUint8 iNameLength;
	TUint8 iName[2];
	};
const TInt KRomEntrySize=(sizeof(TRomEntry)-2);
//
class TRomDir
	{
public:
	TInt iSize;
	TRomEntry iEntry;
	};
//
// Header of ROM image files under the new scheme. (dlls & exes)
//	
class TRomImageHeader
	{
public:
	TUint32	iUid1;
	TUint32	iUid2;
	TUint32	iUid3;
	TUint32	iCheck;
	TUint iEntryPoint;
	TUint iCodeAddress;
	TUint iDataAddress;
	TInt iCodeSize;
	TInt iTextSize;
	TInt iDataSize;
	TInt iBssSize;
	TInt iHeapSizeMin;
	TInt iHeapSizeMax;
	TInt iStackSize;
	TDllRefTable* iDllRefTable;
	TInt iExportDirCount;
	TUint iExportDir;
	TUint iCheckSumCode;
	TUint iCheckSumData;
	TVersion iVersion;
	TUint iFlags;
	TProcessPriority iPriority;
	TUint iDataBssLinearBase;
	TLinAddr iNextExtension;
	TUint iHardwareVariant;
	};	
//
#endif

