⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame.h

📁 在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己的开发
💻 H
字号:
// FRAME.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#ifndef FRAME_H
#define FRAME_H

#include <oplr.h>

// if these constants are equal reading a string needs only one function
const TInt KMaxGlobalNameLen=32; // also defined in GlobTbl.h
const TInt KMaxProcNameLen=32; // also defined in Module.h

// flags used in frame
const TInt KCalledByString=0x01;
const TInt KGlobalsAdded=0x02;
const TInt KDebuggerSignalled=0x04;

struct SOplGlobal
	{
	TBufC<KMaxGlobalNameLen> name;
	TInt type;
	TInt offset;
	};

struct SOplSubProc
	{
	TInt offset; // offset to name in q-code
	TBufC<KMaxProcNameLen> name;
	TInt noOfParam;
	};

struct SStringFixUp
	{
	TInt offset;
	TInt maxLen;
	};

struct SArrayFixUp
	{
	TInt offset;
	TInt maxIndex;
	};

class CProcDef;
class COplRuntime;
class CProcedure;

class CFrame : public CBase
	{
public:
	CFrame();
	void ConstructL(CStack& aStack,COplRuntime& aRuntime,CProcDef* aProcDef,TUint8* aReturnIP=NULL,CFrame* aPrevFrame=NULL,TInt aFlags=0);
	void FinishConstructionL(); // errors here are reported as in this frame
	TAny* VarAddrRel(TInt aOffset);
	TAny* VarAddrInd(TInt aIndex);
	SOplSubProc GetSubProc(TInt aIndex);
	TStackPtr StackPtr() {return iSP;};
	TInt Flags() {return iFlags;};
	~CFrame();
    TUint8* OnErrIP() {return iOnErrIP;}
    void SetOnErrIP(TUint8* aNewIP) {iOnErrIP=aNewIP;}
	CProcDef& ProcDef() {return *iProcDef;}
	CFrame* iPrevFrame;
	TInt MaxStack() {return iMaxStack;}
	TInt EvalNestCount() {return iEvalNestCount;} const
	void IncEvalNestCount() {++iEvalNestCount;}
	void DecEvalNestCount() {--iEvalNestCount;}
private:
	void GetParamsL(CStack& aStack,CProcedure* aProcedure);
	void GetExternsL(CProcedure* aProcedure);
	void DoStringFixUps();
	void DoArrayFixUps();
private:
	COplRuntime* iRuntime;
	TUint8* iFrameCell;
	TUint8* iReturnIP;
	CArrayFixFlat<TAny*>* iIndirectTbl;
	CProcDef* iProcDef;
	TUint8* iOnErrIP;
	TStackPtr iSP;
	TInt iFlags;
	TInt iMaxStack;
	TInt iStartOfIndTbl;
	TInt iEvalNestCount;
	};


class CProcedure : public CBase
	{
public:
	CProcedure();
	~CProcedure();
	void ConstructL(CProcDef* aProcDef,const RFile& aFile);
	TUint8* iQCodeCell;
	TInt iMaxStack;
	//all that is needed for "Hello World"
	TInt iDataSize;
	CArrayFixFlat<TInt>* iParamList;
	CArrayFixFlat<SOplGlobal>* iGlobals;
	CArrayFixFlat<SOplSubProc>* iSubProcs;
	CArrayFixFlat<SOplGlobal>* iExternals;
	CArrayFixFlat<SStringFixUp>* iStringFixUps;
	CArrayFixFlat<SArrayFixUp>* iArrayFixUps;
	void AddGlobalsL(COplRuntime& aRuntime,TUint8* aCell);
	TInt iTotalTableSize;

private:
	TInt ReadWordL(TInt& aPos,const TUint8* aDataPtr);
	TBuf<KMaxGlobalNameLen> ReadStringL(TInt& aPos,const TUint8* aDataPtr);
	void LoadQCodeL(TInt aPos,TInt aLength,const RFile& aFile);
	};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -