// BARSC.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

// Started by MJB, May 1995
// Resource files
//

#if !defined(__BARSC_H__)
#define __BARSC_H__

#if !defined(__E32STD_H__)
#include <e32std.h>
#endif

#if !defined(__F32FILE_H__)
#include <f32file.h>
#endif

class RResourceFile
	{
public:
	IMPORT_C RResourceFile();
    IMPORT_C void Close();
	IMPORT_C void OpenL(RFs &aFs,const TDesC &aName);
	IMPORT_C void ReadL(TDes8 &aDes,TInt aResourceId) const;
	IMPORT_C HBufC8 *AllocReadL(TInt aResourceId) const;
	IMPORT_C HBufC8 *AllocReadLC(TInt aResourceId) const;
    IMPORT_C void ConfirmSignatureL(TInt aSignature);
	IMPORT_C TInt SignatureL() const; // not available before Release 005
	IMPORT_C TBool OwnsResourceId(TInt aResourceId) const;
    inline TInt Offset() const { return(iOffset); }
private:
	struct SIndexRec
		{
		TUint16 iPos;
		TUint16 iLen;
		};
	struct SSigRecord
		{
		TInt signature;
		TInt offset;
		};
private:
	void ReadL(TInt aPos,TDes8& aDes,TInt aLength) const;
	TInt PositionToResourceL(TInt aResourceId,TInt &aDecodedLen,TInt& aSeekPos) const;
	void ReadResourceDataL(TDes8 &aDes,TInt aReadLen,TInt aDecodedLen,TInt aSeekPos) const;
	void static Leave(TInt aClassSpecificError);
	SSigRecord FirstRecordL() const;
private:
	RFile iFile;
	const TUint8* iRomAddress;
	TInt iOffset;
	TInt iIndexPos;
	TInt iCount;
private:
	enum
		{
		EOffsetBits=0xfffff000,
		EIdBits=0x00000fff
		};
	};

#endif
