📄 cli_interpret.c
字号:
return CT_INTP_RETURNED_FOR_HELP;
}
}
else if(!IS_COMPLETE(ulStatus) && !IS_ENV_SILENT(pWS->ulStatus)
&& !IS_NOFORM(pWS->ulStatus))
{
if(IS_WAIT_OBJ(ulStatus))
{
IO_Print(CLI_INTP_CMD_INCOMPLETE);
IO_OutString(pWS->szCmdString);
IO_Print(CLI_INTP_NEED_COMWORD);
IO_OutString(pointer.expP.pObj->szName);
return G_FAILURE;
}
if(IS_WAIT_PARAM(ulStatus) && (CI_BrotherParameterOptional(&pointer.expP.pParam) != G_SUCCESS))
{
IO_Print(CLI_INTP_CMD_INCOMPLETE);
IO_OutString(pWS->szCmdString);
IO_Print(CLI_INTP_NEED_PARAM);
IO_OutString(pointer.expP.pParam->szName);
return G_FAILURE;
}
if(IS_WAIT_VALUE(ulStatus) && (CI_BrotherValueOptional(&pointer.expP.pValue) != G_SUCCESS))
{
IO_Print(CLI_INTP_CMD_INCOMPLETE);
IO_OutString(pWS->szCmdString);
IO_Print(CLI_INTP_NEED_VALUE);
IO_OutString(pointer.expP.pValue->szName);
return G_FAILURE;
}
}
else if(!IS_MATCHSUCC(ulStatus) && !IS_ENV_SILENT(pWS->ulStatus)
&& !IS_NOFORM(pWS->ulStatus) && EOS_StrLen(szToken))
{
if(IS_WAIT_PARAM(ulStatus))
{
IO_Print(CLI_INTP_INVALID_PARAM);
IO_OutString(szToken);
}
else if(IS_WAIT_VALUE(ulStatus))
{
IO_Print(CLI_INTP_INVALID_VALUE);
IO_OutString(szToken);
}
else
{
IO_Print(CLI_INTP_INNEED_PARAM);
IO_OutString(szToken);
}
return G_FAILURE;
}
/* Check user right level & Execute */
ulUserRightLevel = CI_GetUserRightLevel(pWS);
if( CI_UserPermitted(ulUserRightLevel, pointer.curP.pObj, ulStatus)
== G_SUCCESS )
{
if((EOS_StrLen(pWS->szCmdString) + EOS_StrLen(&(pointer.szPatch[0])))
< CT_MAX_CMDBUF - 1)
{
if ( !IS_ENV_RUNCFG(pWS->ulStatus) )
EOS_StrCat( pWS->szCmdString, &pointer.szPatch[0]);
}
if((!IS_ENV_ENTER(pWS->ulStatus)) && (IS_MATCHSUCC(ulStatus)))
{
if(((pointer.curP.pObj->noAction.pFunction == G_NULL)
&&(pointer.curP.pObj->action.pFunction == G_NULL)
&&(pointer.curP.pObj->action.modeConv == CT_MC_NULL))
||(!EOS_StriCmp(szToken,"no"))
||(!IS_COMPLETE(ulStatus)))
EOS_StrCat( pWS->szCmdString, " ");
else if(IS_COMPLETE(ulStatus))
{
EOS_StrCat( pWS->szCmdString, " ");
}
}
/* Execute the Command Function */
if(!IS_ENV_SILENT(pWS->ulStatus))
{
/* 解释成功的命令执行 */
ulRet = CI_TakeAction(pointer.curP.pObj, ulStatus, pWS);
if (ulRet != G_SUCCESS)
{
if(!IS_ENV_SILENT(pWS->ulStatus) && ulRet == G_FAILURE)
IO_Print(CLI_INTP_CMD_FAILED);
return ulRet;
}
else
{
m_ulLogTag = 1;
}
}
}
else
{
if(!IS_ENV_SILENT(pWS->ulStatus))
IO_OutString("\r\n Access denied.") ;
return G_FAILURE;
}
return G_SUCCESS;
}
/*********************************************************************/
/* 函数名称 : CT_GetUserType() */
/* 函数功能 : 获取用户自定义类型 */
/* 返回 : 用户自定义的类型结构 */
/*********************************************************************/
CT_USERTYPE_T * CT_GetUserType(_U32 ulType)
{
return &m_sCliUserType[ulType - CT_DATA_USER];
}
_U32 CT_ValidateUserType(_U32 ulType)
{
if((ulType >= CT_DATA_USER) && (ulType < CT_DATA_BOTTOM))
{
if((m_sCliUserType[ulType-CT_DATA_USER].ucTypeID == ulType)
&& (m_sCliUserType[ulType-CT_DATA_USER].pCheckFunc != G_NULL))
{
return G_SUCCESS;
}
}
return G_FAILURE;
}
/*※※※※※※※※※※※※※※*/
/* 【1】命令字的获取 */
/*※※※※※※※※※※※※※※*/
/*********************************************************************/
/* 函数名称 : CI_GetCmdToken */
/* 函数功能 : 以字符串形式获取下一个命令字 */
/* 输入参数 : szCmdString 命令缓冲中的命令串 */
/* ulStatus 命令解释状态 */
/* pPointer 命令解释核心结构 */
/* 输出参数 : szToken 所获取的命令字 */
/* 返回 : 成功、失败 */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_U32 CI_GetCmdToken( _S8 **szCmdString, _S8 *szToken,
_U32 *ulStatus, CI_POINTER_P pPointer)
{
/* Check whether interactive operation needs? */
if(IS_INTERACTIVE(*ulStatus))
{
/* 如果当前匹配参量可跳过并且用户已经输入了命令字,则直接返回 */
if( IS_SKIP_FLAG(*ulStatus) && szToken[0])
{
return G_SUCCESS;
}
/* Note : A token of empty string is permitted. */
return CI_GetCmdTokenFromUser( szToken, *ulStatus, pPointer );
}
else
{
if( IS_SKIP_FLAG(*ulStatus) )
{
return G_SUCCESS;
}
return CI_GetCmdTokenFromBuffer( szCmdString, szToken, ulStatus );
}
} /* End of Function CI_GetCmdToken() */
/*********************************************************************/
/* 函数名称 : CI_GetInteractiveObject() */
/* 函数功能 : 给出交互状态下的对象提示 */
/* 输入参数 : pPointer 命令解释核心结构 */
/* ulStatus 命令解释状态 */
/* 输出参数 : szSelect 所给出的对象名 */
/* 返回 : */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_S8 *CI_GetInteractiveObject(CI_POINTER_P pPointer, _U32 ulStatus, _S8 *szSelect)
{
CT_OBJECT_P pObject;
_U32 ulLen,ulNameLen;
pObject = pPointer->expP.pObj;
EOS_StrCpy(szSelect,"<");
ulLen = EOS_StrLen(szSelect);
ulNameLen = 0;
/* Get a object name string */
while(pObject != G_NULL)
{
if(CT_IS_CURRENT_KNOWN_OBJ(pObject, pPointer->pWS)
&&((IS_NOFORM(ulStatus) && (pObject->ulNoFlag))||(!IS_NOFORM(ulStatus))))
{
if(ulNameLen != 0)
{
EOS_StrCpy(szSelect+ulLen,",");
ulLen++;
}
ulNameLen = EOS_StrLen(pObject->szName);
if(( ulNameLen + ulLen + 1) <= 500) /* 字符串长度不能超过500,加1为防止越界 */
{
EOS_StrCpy(szSelect+ulLen,pObject->szName);
ulLen += ulNameLen;
}
else
{
EOS_StrCpy(szSelect+ulLen,"...");
ulLen += 3;
break;
}
}/* end of if-block */
pObject = pObject->pNext;
} /* end of while() */
EOS_StrCpy(szSelect+ulLen,">");
return szSelect;
} /* End of function CI_GetInteractiveObject() */
/*********************************************************************/
/* 函数名称 : CI_GetInteractiveObject() */
/* 函数功能 : 给出交互状态下的参数提示 */
/* 输入参数 : pPointer 命令解释核心结构 */
/* 输出参数 : szSelect 所给出的参数名 */
/* 返回 : */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_S8 *CI_GetInteractiveParameter(CI_POINTER_P pPointer, _S8 *szSelect)
{
CT_PARAMETER_P pParam;
_U32 ulLen,ulNameLen;
_BOOL bOptional;
_U32 ulMtIndex;
ulLen = 0;
pParam = pPointer->expP.pParam;
if(CT_PARAM_IS_OPTIONAL(pParam))
{
EOS_StrCpy(szSelect,"[");
bOptional = G_TRUE;
}
else
{
EOS_StrCpy(szSelect,"<");
bOptional = G_FALSE;
}
ulLen ++;
ulNameLen = 0;
if(CT_PARAM_IS_MUTEX(pParam))
{
ulMtIndex = pParam->ulAbsoluteIndex;
while(pParam != G_NULL
&& CT_PARAM_IS_MUTEX(pParam)
&& pParam->ulAbsoluteIndex == ulMtIndex)
{
if(ulNameLen != 0)
{
EOS_StrCpy(szSelect+ulLen,",");
ulLen++;
}
ulNameLen = EOS_StrLen(pParam->szName);
if(( ulNameLen + ulLen + 1) <= 500)
{
EOS_StrCpy(szSelect+ulLen,pParam->szName);
ulLen += ulNameLen;
}
else
{
EOS_StrCpy(szSelect+ulLen,"...");
ulLen += 3;
break;
}
pParam = pParam->pNext;
} /* end of while-block */
}
else
{
/* Not mutex */
EOS_StrCpy(szSelect+ulLen,pParam->szName);
ulLen += EOS_StrLen(pParam->szName);
}
if(bOptional == G_TRUE)
{
EOS_StrCpy(szSelect+ulLen,"]");
}
else
{
EOS_StrCpy(szSelect+ulLen,">");
}
return szSelect;
} /* End of function CI_GetInteractiveParameter() */
/*********************************************************************/
/* 函数名称 : CI_GetInteractiveObject() */
/* 函数功能 : 给出交互状态下的参数值提示 */
/* 输入参数 : pPointer 命令解释核心结构 */
/* 输出参数 : szSelect 所给出的参数值 */
/* 返回 : */
/* 上层函数 : */
/* 创建者 : */
/* 修改记录 : */
/*********************************************************************/
_S8 *CI_GetInteractiveValue(CI_POINTER_P pPointer, _S8 *szSelect)
{
CT_VALUE_P pValue;
CT_SERIAL_WORD_P pKeyword = G_NULL;
_U32 ulLen,ulElement;
_S8 s8Tmp[CT_MAX_PARAMLEN + 3];
ulLen = 0;
pValue = pPointer->expP.pValue;
/* Add value name to string */
if(CT_VALUE_IS_OPTIONAL(pValue))
{
EOS_StrCpy(szSelect,"[");
EOS_StrCat(szSelect,pValue->szName);
EOS_StrCat(szSelect,"]");
}
else
{
EOS_StrCpy(szSelect,"<");
EOS_StrCat(szSelect,pValue->szName);
EOS_StrCat(szSelect,">");
}
if( CT_VALUE_USER_CHECK(pValue) )
{
ulLen = EOS_StrLen(szSelect);
pValue->pCheckFunc(G_NULL,szSelect+ulLen,pPointer->pWS);
return szSelect;
}
if( CT_ValidateUserType((_U32)pValue->valueType.ucDataType) == G_SUCCESS)
{
ulLen = EOS_StrLen(szSelect);
CT_GetUserType((_U32)pValue->valueType.ucDataType)->pCheckFunc(G_NULL,szSelect+ulLen,pPointer->pWS);
return szSelect;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -