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

📄 style.h

📁 一个多线程
💻 H
字号:
#ifndef __style_h__
#define __style_h__

#include "afxtempl.h"
#include "afxmt.h"

#include "unibus.h"
#include "Scaner.h"

void WriteError(char * filename,int line,char * samp,char * error);

typedef COMMANDRESULT (APIENTRY * COMMPARSEFN)(UniVar * pdwParamList,int iVarNum=0);
class CStyle  ;
class AFX_EXT_CLASS CFunctionRegister  
{
public:
	CFunctionRegister(){m_pStyle=NULL;};
	virtual ~CFunctionRegister(){};
	CStyle  *  m_pStyle;
	virtual COMMPARSEFN FindFunction(DWORD dwFunctionId){return NULL;};
	virtual void OnRegisterBaseStyle(){};
	bool AddStyle(char *filename);
	void AddSystemVariant(LPSTR lpCommand,DWORD dwCommandId);
	bool AddSystemCommand(LPSTR lpCommand,DWORD dwCommandId,UniVar var=InValidVar,...);
};

#define WORD_VERION			0x20
#define WORD_VARIANT		0x21
#define WORD_COMMAND		0x22
#define WORD_EVENT			0x23
#define WORD_PARAM			0x24
#define WORD_OIDENTY		0x25
#define WORD_PARENTSTYLE	0x26
#define WORD_CONST			0x27
#define WORD_STATIC			0x28
#define WORD_INCLUDE		0x29

#define WORD_INT_TYPE		0x30
#define WORD_FLOAT_TYPE		0x31
#define WORD_STRING_TYPE	0x32
#define WORD_DWORD_TYPE		0x33
#define WORD_HANDLE_TYPE	0x34

#define WORD_NOPARAM	0x40
#define WORD_UNKNOWN	0x41

#define WORD_PARAMIN	0x50
#define WORD_PARAMINOUT	0x51

#define TYPE_INT		0x00000000
#define TYPE_FLOAT		0x01000000
#define TYPE_DWORD		0x02000000
#define TYPE_STRING		0x03000000
#define TYPE_HANDLE		0x04000000

#define DTYPE_FILTER	0x0f000000
#define ITYPE_FILTER	0xf0000000
#define UTYPE_FILTER	0xf0000000
#define POSID_FILTER	0x00ffffff
#define STYPE_FILTER	0xff000000

struct WORDTABLE{
	LPSTR lpWord;
	DWORD dwIdenty;
};

struct EVENTTABLE{
	DWORD dwUserEventId;
};

struct CONSTVAR{
	LPSTR lpConst;
	LPSTR lpName;
	DWORD dwId;
};

struct COMMANDSTRUCT{
	DWORD dwCommandId;
	int ParamNum;
	int iStartParam;
	COMMPARSEFN pFn;
};

#define USE_TYPE_IN			0
#define USE_TYPE_INOUT		1

#define TYPE_CONST		0xf0000000
#define TYPE_VARIANT	0xe0000000
#define TYPE_GLOBALVAR	0xd0000000
#define TYPE_LOCALVAR	0xc0000000
#define TYPE_EXPR		0xb0000000
#define TYPE_STATIC		0x50000000

#define TYPE_COMMAND	0xa0000000
#define TYPE_FUNCTION	0x90000000
#define TYPE_EVENT		0x80000000
#define TYPE_LABEL		0x70000000
#define TYPE_BNODE		0x60000000
#define TYPE_SYSTEM		0x00000000

class AFX_EXT_CLASS CStyle  
{
private:
	WORDTABLE * m_pstkStyleWord;
	CScanner * m_pScanner;
	int m_iuser;
	int m_icLine;
	int m_ierror;
//	HANDLE m_hCompile;
public:
	void AddRef(){m_iuser++;};
	void Release(){m_iuser--;};
	CStyle(CFunctionRegister * pRegister,LPSTR lpStyleFile);
	virtual ~CStyle();

	CArray <PARAMEMTER,PARAMEMTER&> m_ParamArray;
	CArray <COMMANDSTRUCT, COMMANDSTRUCT&> m_CommandList;
	CArray <EVENTTABLE,EVENTTABLE&> m_UserEventList;
	CString m_csVersion;

	CMapStringToPtr m_StyleStrTable;
	CFunctionRegister * m_pRegister;
	CString m_csFileName;
	CArray<CONSTVAR,CONSTVAR&> m_ListConst;

	BOOL GetStyle();
	BOOL ReadLine();
	void SetRegister();
	static CMapStringToPtr m_StrStyleCommand;
	void WriteError(LPCTSTR pName,int line,char * samp,char * error){
		::WriteError((LPSTR)pName,line,samp,error);
	};
	void AddSystemCommand(LPSTR lpCommand,DWORD dwCommandId,int ParamNum,UniVar * pParam);
	void AddSystemVariant(LPSTR lpCommand,DWORD dwCommandId);
	bool AddStyle(char *filename);
};

class AFX_EXT_CLASS CStyleMg{
public:
	CArray<CStyle *,CStyle *> m_StyleList;
	CRITICAL_SECTION statArea;
	CArray<UniVar,UniVar>m_StaVarList;
	CMapStringToPtr m_StaVarMap;
	DWORD AddStaticVar(LPCTSTR);
	BOOL SetStaVar(DWORD dwId,UniVar uv);
	BOOL GetStaVar(DWORD dwId,UniVar & uv);
	CStyle * GetStyle(CFunctionRegister * pRegister,LPSTR lpStyleFile){
		CStyle * pStyle=FindStyle(pRegister,lpStyleFile);
		if(pStyle)return pStyle;
		pStyle=new CStyle(pRegister,lpStyleFile);
		if(pStyle){
			if(!pStyle->GetStyle()){
				delete pStyle;
				pStyle=NULL;
			}
			else 
				m_StyleList.Add(pStyle);
		}
		return pStyle;
	};
	CStyle * FindStyle(CFunctionRegister * pRegister,LPSTR lpStyleFile)
	{
		for(int i=0;i<m_StyleList.GetSize();i++){
			if(!m_StyleList[i]->m_csFileName.CompareNoCase(lpStyleFile)
				&&m_StyleList[i]->m_pRegister==pRegister)
				return m_StyleList[i];
		}
		return NULL;
	};
	CStyleMg();
	~CStyleMg(){
		for(int i=0;i<m_StyleList.GetSize();i++){
			delete m_StyleList[i];
		}
		CStyle::m_StrStyleCommand.RemoveAll();
		DeleteCriticalSection(&statArea);
	};
};
extern CStyleMg gpStyleMg;

#endif

⌨️ 快捷键说明

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