📄 execcomm.cpp
字号:
//根据判断得FuncNo
if (i==strlen(CommLine)-1)
{
pNew->FuncNo=g_nFuncNo;
g_nFuncNo++;
}
else
pNew->FuncNo=0;
pParent->pLeft =pNew;
pParent=pNew;
}
else //有节点
{
pSon=pParent->pLeft;
while(pSon->pRight !=NULL && pSon->Value !=CommLine[i])
pSon=pSon->pRight;
if (pSon->Value !=CommLine[i])
{
pNew=(pNode)malloc(sizeof(Node));
pNew->pLeft=NULL;
pNew->pRight=NULL;
pNew->Value=CommLine[i];
//根据判断得Type
if (CommLine[i]!='\xff')
{
pNew->Type=0;
}
else
pNew->Type=1;
//根据判断得FuncNo
if (i==strlen(CommLine)-1)
{
pNew->FuncNo=g_nFuncNo;
g_nFuncNo++;
}
else
pNew->FuncNo=0;
pSon->pRight =pNew;
pParent=pNew;
}
else
pParent=pSon;
}
}
return 0;
}
///////////////////////////////////////////////////////////////////
//解释字符流
int OutputComm(char * szCommand)
{
unsigned int i;
int j;
int retVal;
int CommLen;
for (i=0;i<strlen(szCommand);i++)
{
if (szCommand[i]!='\x1b')
{
// printf("%c ",szCommand[i]);
// MessageBox(NULL,_T("??"),_T(""),MB_OK);
}
else
{
CommLen=0;
retVal=SearchComm(pRoot,szCommand+i,&CommLen);
if (retVal==0)
i=i+CommLen-1;
else
{
for (j=0;j<50;j++)
g_iArrPara[j]=0;
ParaNum=1; //参数起始下标
fStartPara=0; //参数状态
CommLen=0;
retVal=SearchComm1(pRoot1,szCommand+i,&CommLen);
if (retVal==0)
i=i+CommLen-1;
else
i=i+CommLen-2;
}
}
}
return 0;
}
/*
//////////////////////////////////////////////////////////////////////////////
//无参数命令分析
int SearchComm(pNode pHead, char * szCommand, int * CommLen)
{
// int i;
// int nRetVal;
pNode pParent;
char Msg[128];
if (szCommand[0]==0x00)
return 1;
if (pHead==NULL)
return 1;
pParent=pHead->pLeft;
(*CommLen)++;
while (pParent->Value !=szCommand[0] && pParent->pRight!=NULL)
pParent=pParent->pRight;
if (pParent->Value!=szCommand[0])
{
// printf("%c ",szCommand[0]);
// SearchComm(pRoot,szCommand+1);
return 1;
}
else
{
if (pParent->FuncNo==0)
return SearchComm(pParent,szCommand+1,CommLen);
else
{
sprintf(Msg,"FUNC[%d] ",pParent->FuncNo );
MessageBox(NULL,Msg,NULL,MB_OK);
return 0;
// SearchComm(pRoot,szCommand+1);
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////
//带参数命令分析
int SearchComm1(pNode pHead, char * szCommand, int * CommLen)
{
int i;
// int nRetVal;
pNode pParent;
char Msg[128];
char Para[10];
if (szCommand[0]==0x00)
return 1;
if (pHead==NULL)
return 1;
if (pHead->Type ==0 || ((szCommand[0]<0x30 || szCommand[0]>0x39) && szCommand[0]!=';'))
pParent=pHead->pLeft;//节点类型为非参数节点或为参数节点但接收字符不为参数字符时,二叉树下查
else
pParent=pHead;//否则为参数节点且接收到参数字符,二叉树节点不变
(*CommLen)++; //命令长度加一
while (pParent->pRight!=NULL)
{
if (pParent->Type ==0 && pParent->Value ==szCommand[0])//非参数节点时,在二叉树中查询到输入字符时结束
break;
if (pParent->Type ==1 && (szCommand[0] <=0x39 && szCommand[0] >= 0x30 || szCommand[0] ==';'))
break;//参数节点且输入为参数字符时结束
pParent=pParent->pRight;
}
//fStartPara:参数接收标志
// 0:非参数节点
// 1:参数节点可接收数字或';'或结束参数输入
// 2:参数节点只能接收数字
if (pParent->Type ==0) //非参数节点分析
{
if (pParent->Value!=szCommand[0]||fStartPara==2)//命令分析错误
{
// printf("%c ",szCommand[0]);
// SearchComm1(pRoot,pRoot,szCommand+1);
return 1;
}
else//命令分析正确
{
fStartPara=0;//
if (pParent->FuncNo==0)//未到页节点继续查询
return SearchComm1(pParent,szCommand+1,CommLen);
else//命令分析完毕,功能函数调用
{
sprintf(Msg,"FUNC[%d](",pParent->FuncNo );
// SearchComm1(pRoot,pRoot,szCommand+1);
g_iArrPara[0]=ParaNum;
for (i=0;i<=ParaNum;i++)
{
sprintf(Para,"%d,",g_iArrPara[i]);
strcat(Msg,Para);
}
strcat(Msg,")");
MessageBox(NULL,Msg,NULL,MB_OK);
// printf(") ");
return 0;
}
}
}
else//参数节点分析
{
if (pParent->Type ==1 && (szCommand[0] <=0x39 && szCommand[0] >= 0x30 || szCommand[0] ==';'))//输入为参数或分隔符
{
if (szCommand[0]>=0x30 && szCommand[0]<=0x39)//输入为数字
{
g_iArrPara[ParaNum]=g_iArrPara[ParaNum]*10+(szCommand[0]-0x30);//计算参数
if (fStartPara==0||fStartPara==2)//进入参数接收状态
fStartPara=1;
}
if (szCommand[0]==';')//输入为分号,下一输入必为数字
{
if (fStartPara==1)
{
ParaNum++;
fStartPara=2;
}
else
return 1;
}
if (pParent->FuncNo==0)//命令未结束,继续分析
return SearchComm1(pParent,szCommand+1,CommLen);
else//命令分析结束,调用功能函数
{
sprintf(Msg,"FUNC[%d](",pParent->FuncNo );
// SearchComm1(pRoot,pRoot,szCommand+1);
g_iArrPara[0]=ParaNum;
for (i=0;i<=ParaNum;i++)
{
sprintf(Para,"%d,",g_iArrPara[i]);
strcat(Msg,Para);
}
strcat(Msg,")");
MessageBox(NULL,Msg,NULL,MB_OK);
// printf(") ");
return 0;
}
}
else//该节点为参数节点
{
// printf("%c ",szCommand[0]);
// SearchComm1(pRoot,pRoot,szCommand+1);
return 1;
}
}
return 0;
}
*/
//////////////////////////////////////////////////////////////////////////////
//无参数命令分析
int SearchComm(pNode pHead, char * szCommand, int * CommLen)
{
// int i;
// int nRetVal;
pNode pParent=NULL;
// char Msg[128];
if (szCommand[0]==0x00)
{
pCurrNode=pHead;
return 0;
}
if (pHead==NULL)
{
pCurrNode=pRoot;
return 1;
}
pParent=pHead->pLeft;
(*CommLen)++;
szCurrCommand[strlen(szCurrCommand)]=szCommand[0];
while (pParent->Value !=szCommand[0] && pParent->pRight!=NULL)
pParent=pParent->pRight;
if (pParent->Value!=szCommand[0])
{
// printf("%c ",szCommand[0]);
// SearchComm(pRoot,szCommand+1);
pCurrNode=pRoot;
return 1;
}
else
{
if (pParent->FuncNo==0)
return SearchComm(pParent,szCommand+1,CommLen);
else
{
// sprintf(Msg,"FUNC[%d] ",pParent->FuncNo );
// MessageBox(NULL,Msg,NULL,MB_OK);
CmdFun[pParent->FuncNo -1]();
pCurrNode=pRoot;
return 0;
// SearchComm(pRoot,szCommand+1);
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////
//带参数命令分析
int SearchComm1(pNode pHead, char * szCommand, int * CommLen)
{
// int i;
// int nRetVal;
pNode pParent=NULL;
// char Msg[128];
// char Para[10];
if (szCommand[0]==0x00)
{
pCurrNode=pHead;
fTree=1;
return 0;
}
if (pHead==NULL)
{
pCurrNode=pRoot;
fTree=0;
return 1;
}
if (pHead->Type ==0 || ((szCommand[0]<0x30 || szCommand[0]>0x39) && szCommand[0]!=';'))
pParent=pHead->pLeft;
else
pParent=pHead;
(*CommLen)++;
// szCurrCommand[strlen(szCurrCommand)]=szCommand[0];
while (pParent->pRight!=NULL)
{
if (pParent->Type ==0 && pParent->Value ==szCommand[0])
break;
if (pParent->Type ==1 && (szCommand[0] <=0x39 && szCommand[0] >= 0x30 || szCommand[0] ==';'))
break;
pParent=pParent->pRight;
}
if (pParent->Type ==0)
{
if (pParent->Value!=szCommand[0]||fStartPara==2)
{
// printf("%c ",szCommand[0]);
// SearchComm1(pRoot,pRoot,szCommand+1);
pCurrNode=pRoot;
fTree=0;
#ifdef UNICODE
TCHAR wcCmd[10];
mbstowcs(wcCmd,szCommand,sizeof(wcCmd));
// MessageBox(NULL,wcCmd,NULL,MB_OK);
#else
// MessageBox(NULL,szCommand,NULL,MB_OK);
#endif
return 1;
}
else
{
fStartPara=0;
if (pParent->FuncNo==0)
return SearchComm1(pParent,szCommand+1,CommLen);
else
{
// sprintf(Msg,"FUNC[%d](",pParent->FuncNo );
// SearchComm1(pRoot,pRoot,szCommand+1);
g_iArrPara[0]=ParaNum;
// for (i=0;i<=ParaNum;i++)
// {
// sprintf(Para,"%d,",g_iArrPara[i]);
// strcat(Msg,Para);
// }
// strcat(Msg,")");
// MessageBox(NULL,Msg,NULL,MB_OK);
CmdFun[pParent->FuncNo -1]();
pCurrNode=pRoot;
fTree=0;
// printf(") ");
return 0;
}
}
}
else
{
if (pParent->Type ==1 && (szCommand[0] <=0x39 && szCommand[0] >= 0x30 || szCommand[0] ==';'))
{
if (szCommand[0]>=0x30 && szCommand[0]<=0x39)
{
g_iArrPara[ParaNum]=g_iArrPara[ParaNum]*10+(szCommand[0]-0x30);
if (fStartPara==0||fStartPara==2)
fStartPara=1;
}
if (szCommand[0]==';')
{
if (fStartPara==1)
{
ParaNum++;
fStartPara=2;
}
else
{
pCurrNode=pRoot;
fTree=0;
#ifdef UNICODE
TCHAR wcCmd[10];
mbstowcs(wcCmd,szCommand,sizeof(wcCmd));
// MessageBox(NULL,wcCmd,NULL,MB_OK);
#else
// MessageBox(NULL,szCommand,NULL,MB_OK);
#endif
return 1;
}
}
if (pParent->FuncNo==0)
return SearchComm1(pParent,szCommand+1,CommLen);
else
{
// sprintf(Msg,"FUNC[%d](",pParent->FuncNo );
// SearchComm1(pRoot,pRoot,szCommand+1);
// g_iArrPara[0]=ParaNum;
// for (i=0;i<=ParaNum;i++)
// {
// sprintf(Para,"%d,",g_iArrPara[i]);
// strcat(Msg,Para);
// }
// strcat(Msg,")");
// MessageBox(NULL,Msg,NULL,MB_OK);
// printf(") ");
CmdFun[pParent->FuncNo-1]();
pCurrNode=pRoot;
fTree=0;
return 0;
}
}
else
{
// printf("%c ",szCommand[0]);
// SearchComm1(pRoot,pRoot,szCommand+1);
pCurrNode=pRoot;
fTree=0;
return 1;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -