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