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

📄 style.cpp

📁 一个多线程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
								}
							}
							else {
								WriteError(pName,m_icLine,pIdentyString,"unknown words");
								m_ierror++;
								ierror=1;
								break;
							}
						}
						if(dwIdentyId==WORD_ENDOFFILE||dwIdentyId==WORD_ENDOFLINE)break;
						if(dwIdentyId!=WORD_IDENTY){
							WriteError(pName,m_icLine,pIdentyString,"unknown words");
							m_ierror++;
							ierror=1;
							break;
						}
						if(!CStyle::m_StrStyleCommand.Lookup(pIdentyString,(void *&)dwIdenty)){
							prm.lpstrPreFix=UniVar::NewBlock(strlen(pIdentyString)+1);
							strcpy(prm.lpstrPreFix,pIdentyString);
							pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
							if(dwIdentyId!=WORD_IDENTY||dwIdentyId==WORD_ENDOFFILE||dwIdentyId==WORD_ENDOFLINE){
								WriteError(pName,m_icLine,pIdentyString,"unknown words");
								m_ierror++;
								ierror=1;
								break;
							}
							if(!CStyle::m_StrStyleCommand.Lookup(pIdentyString,(void *&)dwIdenty)){
								WriteError(pName,m_icLine,pIdentyString,"unknown words");
								m_ierror++;
								ierror=1;
								break;
							}
						}

						if(dwIdenty==WORD_INT_TYPE)
							prm.tv=(0);
						else if(dwIdenty==WORD_FLOAT_TYPE)
							prm.tv=(0.0f);
						else if(dwIdenty==WORD_DWORD_TYPE)
							prm.tv=(DWORD(0));
						else if(dwIdenty==WORD_STRING_TYPE)
							prm.tv=("");
						else if(dwIdenty==WORD_HANDLE_TYPE){
							prm.tv=((DWORD)0);
							pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
							int ilen=0;
							if(dwIdentyId==WORD_UINT)ilen=atoi(pIdentyString);
							if(ilen<0||ilen>=(int)0xfffff0){
								WriteError(pName,m_icLine,pIdentyString,"error block data area size defined");
								m_ierror++;
								ierror=1;
								break;
							}
							prm.tv.SetValue((void *)NULL,ilen);
						}
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						if(dwIdentyId==WORD_OPERATOR){
							if(!strcmp(pIdentyString,"&")){
								prm.tv.inout=USE_TYPE_INOUT;
								pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
							}
							else {
								WriteError(pName,m_icLine,pIdentyString,"unknown words");
								m_ierror++;
								ierror=1;
								break;
							}
						}
						else 
							prm.tv.inout=0;
						if(dwIdentyId==WORD_ENDOFFILE||dwIdentyId==WORD_ENDOFLINE){
							WriteError(pName,m_icLine,pIdentyString,"not a complete clause");
							m_ierror++;
							ierror=1;
							break;
						}
						if(dwIdentyId!=WORD_IDENTY){
							WriteError(pName,m_icLine,pIdentyString,"lost data type define");
							m_ierror++;
							ierror=1;
							break;
						}
						//pIdentyString: parameter name
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						prm.tv.btmust=1;
						if(dwIdentyId==WORD_OPERATOR){
							if(!strcmp(pIdentyString,"=")){
								int iv=prm.tv.inout;
								pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
								if(dwIdentyId==WORD_UINT){
									int i=atoi(pIdentyString);
									if(strlen(pIdentyString)>2){
										if(pIdentyString[1]=='x'||pIdentyString[1]=='X'){
											sscanf(pIdentyString,"%lx",&i);
										}
									}
									if(prm.tv.it==DATA_TYPE_INT)
										prm.tv=i;
									else if(prm.tv.it==DATA_TYPE_DWORD)
										prm.tv=(DWORD)i;
									else if(prm.tv.it==DATA_TYPE_FLOAT)
										prm.tv=(double)i;
									else {
										WriteError(pName,m_icLine,pIdentyString,"error parameter define");
										m_ierror++;
										ierror=1;
										break;
										//error
									}
								}
								else if(dwIdentyId==WORD_FLOAT){
									if(prm.tv.it==DATA_TYPE_INT)
										prm.tv=((int)atof(pIdentyString));
									else if(prm.tv.it==DATA_TYPE_DWORD)
										prm.tv=((DWORD)atof(pIdentyString));
									else if(prm.tv.it==DATA_TYPE_FLOAT)
										prm.tv=((double)atof(pIdentyString));
									else {
										WriteError(pName,m_icLine,pIdentyString,"error parameter define");
										m_ierror++;
										ierror=1;
										break;
										//error
									}
								}
								else if(dwIdentyId==WORD_STRING){
									if(prm.tv.it==DATA_TYPE_STRING)
										prm.tv=(pIdentyString);
									else {
										WriteError(pName,m_icLine,pIdentyString,"error parameter define");
										m_ierror++;
										ierror=1;
										break;
										//error
									}
								}
								else if(dwIdentyId==WORD_OPERATOR){
									if(!strcmp(pIdentyString,"-")){
										pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
										if(dwIdentyId==WORD_UINT){
											if(prm.tv.it==DATA_TYPE_INT)
												prm.tv=(0-atoi(pIdentyString));
											else if(prm.tv.it==DATA_TYPE_FLOAT)
												prm.tv=(0.0f-(double)atoi(pIdentyString));
											else {
												WriteError(pName,m_icLine,pIdentyString,"error parameter define");
												m_ierror++;
												ierror=1;
												break;
												//error
											}
										}
										else if(dwIdentyId==WORD_FLOAT){
											if(prm.tv.it==DATA_TYPE_INT)
												prm.tv=(0-(int)atof(pIdentyString));
											else if(prm.tv.it==DATA_TYPE_FLOAT)
												prm.tv=(0.0f-(double)atof(pIdentyString));
											else {
												WriteError(pName,m_icLine,pIdentyString,"error parameter define");
												m_ierror++;
												ierror=1;
												break;
												//error
											}
										}
										else {
											//error
											WriteError(pName,m_icLine,pIdentyString,"unknown words");
											m_ierror++;
											ierror=1;
											break;
										}
									}
									else {
										//error
										WriteError(pName,m_icLine,pIdentyString,"unknown words");
										m_ierror++;
										ierror=1;
										break;
									}
								}
								else {
									//error
									WriteError(pName,m_icLine,pIdentyString,"unknown words");
									m_ierror++;
									ierror=1;
									break;
								}
								prm.tv.inout=iv;
								prm.tv.btmust=0;
								pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
							}
							else {
								WriteError(pName,m_icLine,pIdentyString,"unknown words");
								m_ierror++;
								ierror=1;
								break;
							}
						}
						if(dwIdentyId==WORD_COMMA){
							m_ParamArray.Add(prm);
							cmd.ParamNum++;
						}
						else if(dwIdentyId==WORD_ENDOFFILE||dwIdentyId==WORD_ENDOFLINE){
							m_ParamArray.Add(prm);
							cmd.ParamNum++;
							break;
						}
						else {
							WriteError(pName,m_icLine,pIdentyString,"unknown words");
							m_ierror++;
							ierror=1;
							break;
						}
					};
					if(ierror){
						if(prm.lpstrPreFix)
							UniVar::DeleteBlock(prm.lpstrPreFix);
					}
					else {
						if(cmd.ParamNum)
							cmd.iStartParam=m_ParamArray.GetSize()-cmd.ParamNum;
						else cmd.iStartParam=-1;
						m_StyleStrTable.SetAt(csnm,(void *)(m_CommandList.GetSize()+TYPE_COMMAND));
						m_CommandList.Add(cmd);
					}
				}
				break;
			case WORD_EVENT:
				pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
				ii=strlen(pIdentyString);
				if(ii&&dwIdentyId==WORD_IDENTY){
					if(m_StyleStrTable.Lookup(pIdentyString,(void *&)dwIdentyId)){
						WriteError(pName,m_icLine,pIdentyString,"redefine key name");
						m_ierror++;
						break;
					}
					EVENTTABLE evt;
					CString csevt=pIdentyString;
					pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
					if(dwIdentyId!=WORD_UINT){
						WriteError(pName,m_icLine,pIdentyString,"unknown words");
						m_ierror++;
						break;
					}
					sscanf(pIdentyString,"%lx",&evt.dwUserEventId);
					evt.dwUserEventId&=~ITYPE_FILTER;
					evt.dwUserEventId|=TYPE_EVENT;
					m_StyleStrTable.SetAt(csevt,(void *)(m_UserEventList.GetSize()+TYPE_EVENT));
					m_UserEventList.Add(evt);
				}
				break;
			default:
				WriteError(pName,m_icLine,pIdentyString,"unknown words");
						m_ierror++;
				break;
			};
		}
		else {
			if(dwIdentyId!=WORD_ENDOFLINE&&dwIdentyId!=WORD_ENDOFFILE){
				WriteError(pName,m_icLine,pIdentyString,"unknown words");
					m_ierror++;
			}
		}
	}
	else {
		if(dwIdentyId!=WORD_ENDOFLINE&&dwIdentyId!=WORD_ENDOFFILE){
			WriteError(pName,m_icLine,pIdentyString,"unknown words");
					m_ierror++;
		}
	}
	while(dwIdentyId!=WORD_ENDOFLINE&&dwIdentyId!=WORD_ENDOFFILE)
		m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
	return TRUE;
}

void CStyle::SetRegister()
{
	if(m_pRegister){
		for(int i=0;i<m_CommandList.GetSize();i++)
			m_CommandList[i].pFn=m_pRegister->FindFunction(m_CommandList[i].dwCommandId);
	}
}

CStyleMg::CStyleMg()
{
	m_StyleList.RemoveAll();
	CStyle::m_StrStyleCommand.RemoveAll();
	for(int i=0;i<sizeof(styleWord)/sizeof(styleWord[0]);i++)
		CStyle::m_StrStyleCommand.SetAt(styleWord[i].lpWord,(void *)styleWord[i].dwIdenty);
	InitializeCriticalSection(&statArea);
};

void CFunctionRegister::AddSystemVariant(LPSTR lpCommand,DWORD dwCommandId)
{
	if(m_pStyle){
		m_pStyle->AddSystemVariant(lpCommand,dwCommandId);
	}
}

bool CFunctionRegister::AddStyle(char *filename)
{
	if(m_pStyle){
		return m_pStyle->AddStyle(filename);
	}
	else
		return false;
}

bool CFunctionRegister::AddSystemCommand(LPSTR lpCommand,DWORD dwCommandId,UniVar var,...)
{
	if(m_pStyle){
		CArray<UniVar,UniVar> um;
		va_list varl;
		va_start(varl,dwCommandId);
		UniVar uv;
		while(1){
			uv=va_arg(varl,UniVar);
			if(UniVar::ValidVar(&uv))
				um.Add(uv);
			else break;
		};
		va_end(varl);
		if(um.GetSize()%2)return false;
		return true;
	}
	else return false;
}

DWORD CStyleMg::AddStaticVar(LPCTSTR lpstr)
{
	DWORD dwid;
	EnterCriticalSection(&statArea);
	try{
		if(!m_StaVarMap.Lookup(lpstr,(void * &)dwid)){
			dwid=m_StaVarList.GetSize()+TYPE_STATIC;
			m_StaVarList.Add(0);
			m_StaVarMap.SetAt(lpstr,(void *)dwid);
		}
	}
	catch(...){
		dwid=0xffffffff;
	}
	LeaveCriticalSection(&statArea);
	return dwid;
}

BOOL CStyleMg::SetStaVar(DWORD dwid,UniVar uv)
{
	BOOL bret=FALSE;
	EnterCriticalSection(&statArea);
	try{
		if((dwid&0xffffff)<(DWORD)m_StaVarList.GetSize()){
			m_StaVarList[dwid&0xffffff]=uv;
			bret=TRUE;
		}
	}
	catch(...){
		bret=FALSE;
	}
	LeaveCriticalSection(&statArea);
	return bret;
}

BOOL CStyleMg::GetStaVar(DWORD dwid,UniVar & uv)
{
	BOOL bret=FALSE;
	EnterCriticalSection(&statArea);
	try{
		if((dwid&0xffffff)<(DWORD)m_StaVarList.GetSize()){
			uv=m_StaVarList[dwid&0xffffff];
			bret=TRUE;
		}
	}
	catch(...){
		bret=FALSE;
	}
	LeaveCriticalSection(&statArea);
	return bret;
}

⌨️ 快捷键说明

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