📄 cli_interpret.c
字号:
if( CT_VALUE_NEED_CHECK(pValue) )
{
if (pValue->valueType.ucDataType == CT_DATA_VI
||pValue->valueType.ucDataType == CT_DATA_VIK)
{
EOS_StrCat(szSelect,"[");
EOS_Sprintf(s8Tmp, "%d",pValue->s32IntFilter[0]);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect,",");
EOS_Sprintf(s8Tmp, "%d",pValue->s32IntFilter[1]);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect,"]");
}
else if (pValue->valueType.ucDataType == CT_DATA_VU
|| pValue->valueType.ucDataType == CT_DATA_VUK)
{
EOS_StrCat(szSelect,"[");
EOS_Sprintf(s8Tmp, "%u",(_U32)pValue->s32IntFilter[0]);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect,",");
EOS_Sprintf(s8Tmp, "%u",(_U32)pValue->s32IntFilter[1]);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect,"]");
}
else if (pValue->valueType.ucDataType == CT_DATA_VH
|| pValue->valueType.ucDataType == CT_DATA_VHK)
{
EOS_StrCat(szSelect,"[");
EOS_Sprintf(s8Tmp, "%x",(_U32)pValue->s32IntFilter[0]);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect,",");
EOS_Sprintf(s8Tmp, "%x",(_U32)pValue->s32IntFilter[1]);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect," (hex)]");
}
else if( (pValue->valueType.ucDataType == CT_DATA_VS) && (pValue->valueType.ucDataLen != 0) )
{
EOS_StrCat(szSelect,"[");
EOS_Sprintf(s8Tmp, "<= %d chars",pValue->valueType.ucDataLen);
EOS_StrCat(szSelect,s8Tmp);
EOS_StrCat(szSelect,"]");
}
else if (pValue->valueType.ucDataType == CT_DATA_DATE)
{
EOS_StrCat(szSelect, "(yyyy-mm-dd)");
}
else if (pValue->valueType.ucDataType == CT_DATA_TIME)
{
EOS_StrCat(szSelect, "(hh:mm:ss)");
}
else if (pValue->valueType.ucDataType == CT_DATA_IP)
{
EOS_StrCat(szSelect, "(IP)");
}
else if (pValue->valueType.ucDataType == CT_DATA_MASK)
{
EOS_StrCat(szSelect, "(MASK)");
}
}
else
{
if (pValue->valueType.ucDataType == CT_DATA_VI
|| pValue->valueType.ucDataType == CT_DATA_VIK)
{
EOS_StrCat(szSelect,"(I)");
}
else if (pValue->valueType.ucDataType == CT_DATA_VU
|| pValue->valueType.ucDataType == CT_DATA_VUK)
{
EOS_StrCat(szSelect,"(U)");
}
else if (pValue->valueType.ucDataType == CT_DATA_VH
|| pValue->valueType.ucDataType == CT_DATA_VHK)
{
EOS_StrCat(szSelect,"(H)");
}
else if (pValue->valueType.ucDataType == CT_DATA_VS)
{
EOS_StrCat(szSelect,"(S)");
}
}
ulElement = 0;
ulLen = EOS_StrLen(szSelect);
if ( (pValue->valueType.ucDataType == CT_DATA_K)
|| (pValue->valueType.ucDataType == CT_DATA_VIK)
|| (pValue->valueType.ucDataType == CT_DATA_VUK)
|| (pValue->valueType.ucDataType == CT_DATA_VHK)
|| (pValue->valueType.ucDataType == CT_DATA_IPK)
|| (pValue->valueType.ucDataType == CT_DATA_MACK) )
{
EOS_StrCat(szSelect,"{");
ulLen++;
pKeyword = pValue->keywords.pKeyword;
while(pKeyword != G_NULL)
{
if(ulElement != 0)
{
EOS_StrCat(szSelect,",");
ulLen ++;
}
EOS_Sprintf(s8Tmp,"%s",pKeyword->pK);
ulElement = EOS_StrLen(s8Tmp);
if((ulLen + ulElement + 1) <= 500)
{
EOS_StrCat(szSelect,s8Tmp);
ulLen += ulElement;
}
else
{
EOS_StrCat(szSelect,"...");
ulLen += 3;
break;
}
pKeyword = pKeyword->pNext;
}
EOS_StrCat(szSelect,"}");
ulLen++;
}
if( CT_VALUE_HAVE_DEFAULT(pValue) )
{
if( G_NULL != pValue->szDefault )
{
EOS_StrCat(szSelect,"[");
EOS_StrCat(szSelect,pValue->szDefault);
EOS_StrCat(szSelect,"]");
}
}
return szSelect;
} /* End of function CI_GetInteractiveValue() */
/*********************************************************************/
/* 函数名称 : CI_GetCmdTokenFromUser() */
/* 函数功能 : 以交互形式获取下一个命令字 */
/* 输入参数 : ulStatus 命令解释状态 */
/* pPointer 命令解释核心结构 */
/* 输出参数 : szToken 获取的命令字 */
/* 返回 : 成功、失败 */
/* 上层函数 : CI_GetCmdToken */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CI_GetCmdTokenFromUser( _S8 *szToken, _U32 ulStatus, CI_POINTER_P pPointer )
{
_S8 szPrompt[512];
_S8 szSelect[512];
_U32 rc;
/* This flag is indicating whether we need a token from user */
_U32 ulFlag;
/* Usually we need user input */
ulFlag = G_TRUE;
szPrompt[0] = '\0';
szSelect[0] ='\0';
/* Check if waiting for an object */
if( IS_WAIT_OBJ(ulStatus) )
{
EOS_Sprintf( &szPrompt[0], "\n\r%s %s:",
"Command word",
CI_GetInteractiveObject(pPointer,ulStatus,&szSelect[0]) );
}
/* Check if waiting for a parameter */
else if( IS_WAIT_PARAM(ulStatus) )
{
if(CT_PARAM_NEED_NAME(pPointer->expP.pParam))
{
EOS_Sprintf( &szPrompt[0], "\n\r%s:",
CI_GetInteractiveParameter(pPointer,&szSelect[0]) );
pPointer->pWS->ulExpectEle = (_U32)pPointer->expP.pParam;
}
else
{
ulFlag = G_FALSE;
}
}
/* Check if waiting for a value */
else if( IS_WAIT_VALUE(ulStatus) )
{
EOS_Sprintf( &szPrompt[0], "\n\r%s:",
CI_GetInteractiveValue(pPointer,&szSelect[0]) );
pPointer->pWS->ulExpectEle = G_NULL;
}
/* Status error */
else
{
MT_ERRLOG(0);
return G_FAILURE;
}
if(ulFlag == G_TRUE)
{
/* Interactive prompt to console user */
IO_OutString( &szPrompt[0] );
/* Set prompt length */
CI_SetPromptLen( EOS_StrLen(szPrompt)-2 ) ;
/* Get an input string from console */
pPointer->pWS->ulStatus |= STAT_ENV_NEWLINE;
if (IS_WAIT_VALUE(*pPointer->ulStatus) && pPointer->expP.pValue != G_NULL)
rc = CI_GetString( szToken, pPointer->expP.pValue->valueType.ucDataLen + 1);
else
rc = CI_GetString( szToken, CT_MAX_PARAMLEN);
}
else
{
*szToken = 0;
rc = G_SUCCESS;
}
return rc;
} /* End of Function CI_GetCmdTokenFromUser() */
/*********************************************************************/
/* 函数名称 : CI_GetCmdTokenFromBuffer() */
/* 函数功能 : 从命令缓冲中获取下一个命令字 */
/* 输入参数 : szCmdString 命令缓冲中的命令串 */
/* ulStatus 命令的解释状态 */
/* 输出参数 : szToken 所获取的命令字 */
/* 返回 : 成功、失败 */
/* 上层函数 : CI_GetCmdToken */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CI_GetCmdTokenFromBuffer( _S8 **szCmdString, _S8 *szToken, _U32 *ulStatus )
{
_S8 *szCmd,*szTkn;
_S32 iTmp;
szCmd = *szCmdString;
szTkn = szToken;
iTmp = 0;
/* ==================================================
Skip flag indicate that we should skip the moving
of the token. Redo it!
This flag is set when we could not match the
current expected element and the element is
an optional one. So we should skip.
================================================== */
if( IS_SKIP_FLAG(*ulStatus) )
{
return G_SUCCESS;
}
/* Skip the character <SPACEBAR> */
while( *szCmd == 0x20 )
{
szCmd++;
}
/* Copy a token and move string pointer */
while( ((*szCmd) != 0x20) && ((*szCmd) != 0) )
{
*(szTkn++) = *(szCmd++);
iTmp++;
/* check whether the token is too long? */
if(iTmp >= MAX_TOKEN_SIZE)
{
if(!IS_ENV_SILENT(*ulStatus))
IO_Print(CLI_CMD_TOO_BIG) ;
SET_BIGTOKEN(*ulStatus);
return G_FAILURE;
}
}
/* No character copied */
if(iTmp == 0)
{
return G_FAILURE;
}
/* Add the terminator of a string */
*szTkn = 0;
*szCmdString = szCmd;
return G_SUCCESS;
} /* End of Function CI_GetCmdTokenFromBuffer() */
/*※※※※※※※※※※※※※※*/
/* 【2】命令字的检验 */
/*※※※※※※※※※※※※※※*/
/*********************************************************************/
/* 函数名称 : CI_CheckElementObject() */
/* 函数功能 : 检验命令对象的合法性 */
/* 输入参数 : szToken 当前的命令字 */
/* pPointer 命令解释核心结构 */
/* pulStatus 命令解释状态 */
/* 输出参数 : pulStatus 命令解释状态 */
/* 返回 : 成功、失败 */
/* 上层函数 : CI_CheckElement */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CI_CheckElementObject(_S8 *szToken,
CI_POINTER_P pPointer,
_U32 *pulStatus )
{
CT_OBJECT_P pObject, pSaveObject; /* Temp object pointer */
CI_INTERPT_POINTER_P pexpP; /* Temp expected pointer*/
/* Check if token is the expecting object name */
/* Waiting object is waiting for all objects
who are brothers. */
_U32 ulCount = 0 ;
_S8 szResult[256];
szResult[0] = '\0';
pObject = pPointer->expP.pObj;
pexpP = &(pPointer->expP);
/* Check the validity of pObject */
pSaveObject = pObject ;
while(pObject != G_NULL)
{
if(CT_IS_CURRENT_KNOWN_OBJ(pObject, pPointer->pWS))
{
/* 处理全字匹配命令对象的情况 */
if( EOS_StriCmp( szToken, pObject->szName ) == 0 )
{
pSaveObject = pObject ;
/* 只要出现全字匹配,就进入ulCount=1的流程(即使在全字匹配前ulCount>=1) */
ulCount = 1; /* modify by wumo 2003-10-28 */
break;
}
if( strmatch( szToken, pObject->szName ) == 0 )
{
if((IS_NOFORM(*pulStatus) && (pObject->ulNoFlag == 1))
|| (!IS_NOFORM(*pulStatus)))
{
ulCount++;
if(ulCount == 1) /* 由于先作加法后判断,所以此处判断是否为1 */
pSaveObject = pObject ;
CI_MatchMore(szResult,pObject->szName);
}
}
}
/* match next fraternal object */
pObject = pObject->pNext;
}/* end of while() */
if(ulCount == 1) /* 由于先作加法后判断,所以此处判断是否为1 */
{
if(IS_NOFORM(*pulStatus) && (pSaveObject->ulNoFlag == 0))
return G_FAILURE;
EOS_StrCpy( &(pPointer->szPatch[0]),
(pSaveObject->szName + EOS_StrLen(szToken)) );
pexpP->pObj = pSaveObject;
pexpP->pParam = G_NULL;
pexpP->pValue = G_NULL;
COPY_POINTER_TO_CUR( pPointer );
SET_MATCHSUCC(*pulStatus);
return G_SUCCESS;
}
else if(ulCount > 1) /* check多个字符 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -