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

📄 userflow.cpp

📁 一个多线程
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						else if(GetPositionId(pIdentyString,dwIdenty)){
							if((dwIdenty&ITYPE_FILTER)==TYPE_EVENT){
								USEREVENT uevt;
								uevt.dwVarNum=0;
								uevt.pstkEvent=&m_pStyle->m_UserEventList[dwIdenty&POSID_FILTER];
								uevt.dwPositionId=m_ListEvent.GetSize();
								uevt.dwPositionId|=TYPE_EVENT;
								m_FlowStrTable.SetAt((LPSTR)(LPCTSTR)cs,(void *)uevt.dwPositionId);
								dwIdentyId=WORD_STARTEVENT;
								m_LineCode.Add(dwIdentyId);
								m_LineCode.Add(dwIdenty);
								uevt.iStart=m_LineList.GetSize();
								uevt.iEnd=-m_icLine;

								pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
								if(dwIdentyId!=WORD_IDENTY){
									WriteError(pName,m_icLine,pIdentyString,"error define first parameter of this event");
									m_ierror++;
									break;
								}

								cs=m_mypos.csTemp;
								cs+="__";
								cs+=pIdentyString;
								m_FlowStrTable.SetAt((LPCTSTR)cs,(void *)((uevt.dwVarNum)|TYPE_LOCALVAR));
								uevt.dwVarNum++;
								cs=pIdentyString;

								pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
								if(dwIdentyId!=WORD_IDENTY){
									WriteError(pName,m_icLine,pIdentyString,"error define last parameter of this event");
									m_ierror++;
									break;
								}
								if(!cs.Compare(pIdentyString)){
									WriteError(pName,m_icLine,pIdentyString,"same name as the first parameter of this event");
									m_ierror++;
									break;
								}
								cs=m_mypos.csTemp;
								cs+="__";
								cs+=pIdentyString;
								m_FlowStrTable.SetAt((LPCTSTR)cs,(void *)((uevt.dwVarNum)|TYPE_LOCALVAR));
								uevt.dwVarNum++;
								dwIdenty=WORD_ENDOFLINE;
								m_LineCode.Add(dwIdenty);
								m_ListEvent.Add(uevt);
								m_mypos.istype=TYPE_EVENT_POS;
								m_mypos.pt.pe=&m_ListEvent[m_ListEvent.GetSize()-1];
								bAddLineCode=TRUE;
							}
							else {
								WriteError(pName,m_icLine,pIdentyString,"unknown words");
								m_ierror++;
							}
						}
						else {
							WriteError(pName,m_icLine,pIdentyString,"unknown words");
							m_ierror++;
						}
					}
					break;
				case WORD_ENDPROC:
					if(m_mypos.istype!=TYPE_FUNC_POS){
						WriteError(pName,m_icLine,pIdentyString,"finish function in other object erea");
						m_ierror++;
						break;
					}
					m_LineCode.Add(dwIdenty);
					dwIdenty=WORD_ENDOFLINE;
					m_LineCode.Add(dwIdenty);
					m_mypos.istype=TYPE_PUBLIC_POS;
					m_mypos.pt.pf->iEnd=m_LineList.GetSize();
					bAddLineCode=TRUE;
					m_mypos.csTemp="";//pIdentyString;
					if(m_Cmpl.ClearScope()){
						WriteError(pName,m_icLine,pIdentyString,"lost scope define:endif,endwhule or endswitch");
						m_ierror++;
					}
					break;
				case WORD_ENDEVENT:
					if(m_mypos.istype!=TYPE_EVENT_POS){
						WriteError(pName,m_icLine,pIdentyString,"finish define event in other object erea");
						m_ierror++;
						break;
					}
					m_LineCode.Add(dwIdenty);
					dwIdenty=WORD_ENDOFLINE;
					m_LineCode.Add(dwIdenty);
					m_mypos.istype=TYPE_PUBLIC_POS;
					m_mypos.pt.pe->iEnd=m_LineList.GetSize();
					bAddLineCode=TRUE;
					m_mypos.csTemp="";//pIdentyString;
					if(m_Cmpl.ClearScope()){
						WriteError(pName,m_icLine,pIdentyString,"lost scope define:endif,endwhule or endswitch");
						m_ierror++;
					}
					break;
				case WORD_STARTMAIN:
					if(m_mypos.istype!=TYPE_PUBLIC_POS){
						WriteError(pName,m_icLine,pIdentyString,"define main in other object erea");
						m_ierror++;
						break;
					}
					m_mypos.csTemp="_mainproc";//pIdentyString;
					m_LineCode.Add(dwIdenty);
					m_iMainStart=m_LineList.GetSize();
					dwIdenty=WORD_ENDOFLINE;
					m_LineCode.Add(dwIdenty);
					m_MainFunc.iStart=m_LineList.GetSize();
					m_MainFunc.iEnd=-1;
					m_MainFunc.dwUserFuncPositionId=0xffffffff;
					m_MainFunc.dwUserFuncPositionId&=POSID_FILTER;
					m_MainFunc.dwUserFuncPositionId|=TYPE_FUNCTION;
					m_MainFunc.dwVarNum=0;
					m_mypos.istype=TYPE_MAIN_POS;
					m_mypos.pt.pf=&m_MainFunc;
					bAddLineCode=TRUE;
					break;
				case WORD_ENDMAIN:
					if(m_mypos.istype!=TYPE_MAIN_POS){
						WriteError(pName,m_icLine,pIdentyString,"finish main function in other object erea");
						m_ierror++;
						break;
					}
					m_LineCode.Add(dwIdenty);
					m_MainFunc.iEnd=iMainEnd=m_LineList.GetSize();
					dwIdenty=WORD_ENDOFLINE;
					m_LineCode.Add(dwIdenty);
					m_mypos.istype=TYPE_PUBLIC_POS;
					bAddLineCode=TRUE;
					m_mypos.csTemp="";//pIdentyString;
					if(m_Cmpl.ClearScope()){
						WriteError(pName,m_icLine,pIdentyString,"lost scope define:endif,endwhule or endswitch");
						m_ierror++;
					}
					break;
				case WORD_RET:
				case WORD_EXIT:
				case WORD_RESUME:
				case WORD_SUSPEND:
					if(m_mypos.istype==TYPE_PUBLIC_POS){
						WriteError(pName,m_icLine,pIdentyString,"error command in public erea");
						m_ierror++;
						break;
					}
					m_LineCode.Add(dwIdenty);
					dwIdenty=WORD_ENDOFLINE;
					m_LineCode.Add(dwIdenty);
					bAddLineCode=TRUE;
					break;
				case WORD_BLOCK:
					{
						if(m_mypos.istype==TYPE_PUBLIC_POS){
							WriteError(pName,m_icLine,pIdentyString,"error command in public erea");
							m_ierror++;
							break;
						}
						m_LineCode.Add(dwIdenty);
						DWORD dwExpr;
						pIdentyString=NULL;
						if(!ExpressionRead(pIdentyString,dwIdentyId,dwIdenty,dwExpr)){
							WriteError(pName,m_icLine,pIdentyString,"error cexpression");
							m_ierror++;
							break;
						}
						if((dwExpr&ITYPE_FILTER)!=TYPE_VARIANT&&(dwExpr&ITYPE_FILTER)!=TYPE_LOCALVAR&&(dwExpr&ITYPE_FILTER)!=TYPE_GLOBALVAR){
							WriteError(pName,m_icLine,pIdentyString,"error VARIANT");
							m_ierror++;
							break;
						}
						m_LineCode.Add(dwExpr);
						if(!ExpressionRead(pIdentyString,dwIdentyId,dwIdenty,dwExpr)){
							WriteError(pName,m_icLine,pIdentyString,"error cexpression");
							m_ierror++;
							break;
						}
						m_LineCode.Add(dwExpr);
						dwIdenty=WORD_ENDOFLINE;
						m_LineCode.Add(dwIdenty);
						bAddLineCode=TRUE;
					}
					break;
				case WORD_SETVALUE:
					{
						if(m_mypos.istype==TYPE_PUBLIC_POS){
							WriteError(pName,m_icLine,pIdentyString,"error command in public erea");
							m_ierror++;
							break;
						}
						m_LineCode.Add(dwIdenty);
						DWORD dwExpr;
						pIdentyString=NULL;
						if(!ExpressionRead(pIdentyString,dwIdentyId,dwIdenty,dwExpr)){
							WriteError(pName,m_icLine,pIdentyString,"error cexpression");
							m_ierror++;
							break;
						}
						if((dwExpr&ITYPE_FILTER)!=TYPE_VARIANT&&(dwExpr&ITYPE_FILTER)!=TYPE_LOCALVAR&&(dwExpr&ITYPE_FILTER)!=TYPE_GLOBALVAR){
							WriteError(pName,m_icLine,pIdentyString,"error VARIANT");
							m_ierror++;
							break;
						}
						m_LineCode.Add(dwExpr);
						if(!ExpressionRead(pIdentyString,dwIdentyId,dwIdenty,dwExpr)){
							WriteError(pName,m_icLine,pIdentyString,"error cexpression");
							m_ierror++;
							break;
						}
						if(dwIdentyId!=WORD_ENDOFLINE&&dwIdentyId!=WORD_ENDOFFILE){
							if(strncmp(pIdentyString,"//",2)){
								WriteError(pName,m_icLine,pIdentyString,"error cexpression");
								m_ierror++;
								break;
							}
						}
						m_LineCode.Add(dwExpr);
						dwIdenty=WORD_ENDOFLINE;
						m_LineCode.Add(dwIdenty);
						bAddLineCode=TRUE;
					}
					break;
				case WORD_BNODE:
					{
						if(m_mypos.csTemp.Compare("_mainproc")){
							WriteError(pName,m_icLine,pIdentyString,"error define business node ,showld define it in mainproc");
							m_ierror++;
							break;
						}
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						if(dwIdentyId!=WORD_IDENTY){
							WriteError(pName,m_icLine,pIdentyString,"error define business node");
							m_ierror++;
							break;
						}
						B_NODE bn;
						CString cs=pIdentyString;
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						if(dwIdentyId!=WORD_STRING){
							WriteError(pName,m_icLine,pIdentyString,"error define business node");
							m_ierror++;
							break;
						}
						if(GetPositionId(cs,dwIdenty)){
							if((dwIdenty&TYPE_BNODE)!=TYPE_BNODE||m_ListBN[dwIdenty&POSID_FILTER].szDiscripe!=NULL){
								WriteError(pName,m_icLine,pIdentyString,"error define business node");
								m_ierror++;
								break;
							}
							m_ListBN[dwIdenty&POSID_FILTER].szDiscripe=UniVar::NewBlock(1+strlen(pIdentyString));
							strcpy(m_ListBN[dwIdenty&POSID_FILTER].szDiscripe,pIdentyString);
							if(m_ListBN[dwIdenty&POSID_FILTER].szDiscripe){//flag
								m_ListBN[dwIdenty&POSID_FILTER].dwLabel=m_LineList.GetSize();
								m_LineCode.Add(dwIdenty);
								dwIdenty=WORD_ENDOFLINE;
								m_LineCode.Add(dwIdenty);
								bAddLineCode=TRUE;
							}
							else {
								WriteError(pName,m_icLine, pIdentyString, "business node name has exist!");
								m_ierror++;
								break;
							}
						}
						else {
							bn.szDiscripe=UniVar::NewBlock(1+strlen(pIdentyString));
							strcpy(bn.szDiscripe,pIdentyString);
							bn.dwInTimes=0;
							bn.dwOutTimes=0;
							bn.dwLabel=m_LineList.GetSize();
							bn.dwPosition=TYPE_BNODE|((m_ListBN.GetSize())&POSID_FILTER);							
							m_FlowStrTable.SetAt(cs,(void *)(bn.dwPosition));			
							m_LineCode.Add(bn.dwPosition);
							m_ListBN.Add(bn);
							dwIdenty=WORD_ENDOFLINE;
							m_LineCode.Add(dwIdenty);
							bAddLineCode=TRUE;
						}
					}
					break;
				case WORD_JUMP:
					{
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						if(dwIdentyId!=WORD_IDENTY)
						{
							WriteError(pName,m_icLine,pIdentyString,"error define business node");
							m_ierror++;
							break;
						}
						if(!GetPositionId(pIdentyString,dwIdenty))
						{
							B_NODE bn;
							bn.szDiscripe=NULL;//new char[1+strlen(pIdentyString)];
							bn.dwInTimes=0;
							bn.dwOutTimes=0;
							bn.dwLabel=m_icLine;//0xffffffff;
							bn.dwPosition=TYPE_BNODE|((m_ListBN.GetSize())&POSID_FILTER);
							m_FlowStrTable.SetAt(pIdentyString,(void *)(bn.dwPosition));
							m_ListBN.Add(bn);
							dwIdenty=WORD_JUMP;
							m_LineCode.Add(dwIdenty);
							m_LineCode.Add(bn.dwPosition);
							dwIdenty=WORD_ENDOFLINE;
							m_LineCode.Add(dwIdenty);
							bAddLineCode=TRUE;
						}
						else 
						{
							switch((dwIdenty&0xff000000)){
							case TYPE_BNODE:
							case TYPE_VARIANT	:
							case TYPE_GLOBALVAR	:
							case TYPE_LOCALVAR	:
							case TYPE_STATIC:
								dwIdentyId=WORD_JUMP;
								m_LineCode.Add(dwIdentyId);
								m_LineCode.Add(dwIdenty);
								dwIdenty=WORD_ENDOFLINE;
								m_LineCode.Add(dwIdenty);
								bAddLineCode=TRUE;
								break;
							default:
								WriteError(pName,m_icLine,pIdentyString,"error define business node");
								m_ierror++;
								break;
							}
						}
					}
					break;
				case WORD_BVARIANT:
					{
						if(m_mypos.istype!=TYPE_PUBLIC_POS){
							WriteError(pName,m_icLine,pIdentyString,"error define business variant,YOU SHOULD DEFINE IT IN PUBLIC AREA");
							m_ierror++;
							break;
						}
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						if(dwIdentyId!=WORD_IDENTY){
							WriteError(pName,m_icLine,pIdentyString,"error define variant");
							m_ierror++;
							break;
						}
						CString cs=m_mypos.csTemp;
						m_mypos.csTemp="";
						if(GetPositionId(pIdentyString,dwIdenty)){
							WriteError(pName,m_icLine,pIdentyString,"error define variant");
							m_ierror++;
							break;
						}
						m_mypos.csTemp=cs;
						cs=pIdentyString;
						pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
						if(dwIdentyId!=WORD_STRING){
							WriteError(pName,m_icLine,pIdentyString,"LOST DEFINE business name");
							m_ierror++;
							break;
						};
						m_FlowStrTable.SetAt(cs,(void *)((dwGlobalVarNum)|TYPE_GLOBALVAR));
						B_VAR bv;
						bv.dwPosition=dwGlobalVarNum;
						bv.szKeyName=UniVar::NewBlock(strlen(pIdentyString)+1);
						strcpy(bv.szKeyName,pIdentyString);
						int nFlag;
						nFlag = 0;
						for(int i = 0; i<m_ListBV.GetSize(); i++)
						{
							if(strcmp(m_ListBV[i].szKeyName, bv.szKeyName) == 0)
							{
								nFlag = 1;
								break;
							}
						}
						if(nFlag)
						{
							WriteError(pName,m_icLine,pIdentyString,"business name has exist!");
							m_ierror++;
							break;
						}
						m_ListBV.Add(bv);
						dwGlobalVarNum+=1;
					}
					break;
				case WORD_VARIANT:
					{
						while(1){
							pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
							if(dwIdentyId!=WORD_IDENTY){
								WriteError(pName,m_icLine,pIdentyString,"error define variant");
								m_ierror++;
								break;
							}
							if(GetPositionId(pIdentyString,dwIdenty,WORD_IDENTY,TRUE)){
								WriteError(pName,m_icLine,pIdentyString,"error define variant");
								m_ierror++;
								break;
							}
							if(m_mypos.istype==TYPE_PUBLIC_POS){
								m_FlowStrTable.SetAt(pIdentyString,(void *)((dwGlobalVarNum)|TYPE_GLOBALVAR));
								dwGlobalVarNum+=1;
							}
							else if(m_mypos.istype==TYPE_EVENT_POS){
								CString cs=m_mypos.csTemp;
								cs+="__";
								cs+=pIdentyString;
								m_FlowStrTable.SetAt((LPCTSTR)cs,(void *)((m_mypos.pt.pe->dwVarNum)|TYPE_LOCALVAR));
								m_mypos.pt.pe->dwVarNum+=1;
							}
							else {
								CString cs=m_mypos.csTemp;
								cs+="__";
								cs+=pIdentyString;
								m_FlowStrTable.SetAt((LPCTSTR)cs,(void *)((m_mypos.pt.pf->dwVarNum)|TYPE_LOCALVAR));
								m_mypos.pt.pf->dwVarNum+=1;
							}
							pIdentyString=m_pScanner->ReadWord(pName,dwIdentyId,m_icLine);
							if(dwIdentyId==WORD_ENDOFLINE||dwIdentyId==WORD_ENDOFFILE)break;
							if(pIdentyString[0]=='/'&&pIdentyString[1]=='/')break;
							if(pIdentyString[0]!=','){
								WriteError(pName,m_icLine,pIdentyString,"error define variant,lost ','.");
								m_ierror++;
								break;
							}
						}
					}
					break;
				case WORD_IF:
					{
						if(m_mypos.istype==TYPE_PUBLIC_POS){
							WriteError(pName,m_icLine,pIdentyString,"error command in public erea");
							m_ierror++;
							break;
						}
						m_LineCode.Add(dwIdenty);
						DWORD dwExpr;

⌨️ 快捷键说明

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