📄 style.cpp
字号:
}
}
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 + -