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

📄 cli_intp.inc

📁 命令行在嵌入式系统的实现
💻 INC
📖 第 1 页 / 共 2 页
字号:
( (pParam)->paramType.ucAttrib & CT_PRMPROP_MUTEX )

/* (2.3) 判断是否需要参数名    */
#define CT_PARAM_NEED_NAME(pParam)                  \
( ((pParam)->paramType.ucAttrib & CT_PRMPROP_NAME )    \
 || ((pParam)->paramType.ucAttrib & CT_PRMPROP_MUTEX) )

/* (2.4) 判断参数是否带值   */
#define CT_PARAM_NEED_VALUE(pParam)                 \
( (pParam)->valueList.ulNumber > 0 )

/* (2.5) 判断参数是否有子参数   */
#define CT_PARAM_NEED_SUB(pParam)                   \
( (pParam)->subParam != G_NULL )

/* (2.6) 判断参数是否有后继 */
#define CT_PARAM_YOUNGER_BROTHER(pParam)    ( (pParam)->pNext != G_NULL )

/* (2.7) 判断参数是否有父参数 */
#define CT_PARAM_PARENT(pParam)     ( (pParam)->pParent != G_NULL )

/* (2.8) 判断参数是否同名 */
#define CT_IS_SAME_PARAM(p1,p2)                     \
( strcmp((p1)->szName,(p2)->szName)== 0 )

/* (2.9) 判断参数是否具有索引调整属性    */
#define CT_PARAM_IS_INDEX(pParam)                   \
( (pParam)->paramType.ucAttrib & CT_PRMPROP_INDEX )


/*【3】参数值*/
/* (3.1) 判断参数值是否有后继 */
#define CT_VALUE_YOUNGER_BROTHER(pValue)    ( (pValue)->pNext != G_NULL )

/* (3.2) 判断参数是否需要自动检测 */
#define CT_VALUE_NEED_CHECK(pValue)                \
( (pValue)->valueType.ucAttrib & CT_VALPROP_CHECK )

/* (3.3) 判断参数是否用户自行检测 */
#define CT_VALUE_USER_CHECK(pValue)                \
( (pValue)->pCheckFunc != G_NULL )

/* (3.4) 判断参数是否有缺省值 */
#define CT_VALUE_HAVE_DEFAULT(pValue)                \
( (pValue)->valueType.ucAttrib & CT_VALPROP_DEFAULT )

/* (3.5) 值是否互斥 (预留)*/
#define CT_VALUE_IS_MUTEX(pInputValue)                  \
( (pInputValue)->valueType.ucAttrib & CT_VALPROP_MUTEX )

/* (3.6) 值是否可选 (预留)*/
#define CT_VALUE_IS_OPTIONAL(pInputValue)               \
( (pInputValue)->valueType.ucAttrib & CT_VALPROP_OPTIONAL )

/*【3】解释状态结构变迁 */
/* (3.1) 保存解析成功的状态 */
#define COPY_POINTER_TO_CUR(p)                          \
{                                                       \
    ((p)->curP).pObj   = ((p)->expP).pObj;              \
    ((p)->curP).pParam = ((p)->expP).pParam;            \
    ((p)->curP).pValue = ((p)->expP).pValue;            \
}

/* (3.2) 获取上次解析成功的状态 */
#define COPY_POINTER_TO_EXP(p)                          \
{                                                       \
    ((p)->expP).pObj   = ((p)->curP).pObj;              \
    ((p)->expP).pParam = ((p)->curP).pParam;            \
    ((p)->expP).pValue = ((p)->curP).pValue;            \
}

/* (3.3) 当前状态是否允许命令交互 */
#define CT_IS_SMARTON(p) ((p).pWS->ulSmart == SMART_ON)


/* -------------------------------- 结构、类描述定义 ------------------------------ */

typedef struct CI_INTERPT_POINTER_S
{
    CT_OBJECT_P    pObj;
    CT_PARAMETER_P pParam;
    CT_VALUE_P     pValue;
}CI_INTERPT_POINTER_T;
typedef CI_INTERPT_POINTER_T *CI_INTERPT_POINTER_P;


/* Pointers data structure */
typedef struct CI_POINTER_S
{
    CI_INTERPT_POINTER_T curP;
    CI_INTERPT_POINTER_T expP;
    CT_WS_P pWS;
    CT_PARAMETER_P pIndexParam;
    _U32 ulValueIndex;
    _U32 *ulStatus;           /* 解释状态 */
    _S8  szPatch[MAX_TOKEN_SIZE + 1];
    _U8  ucMatchFlag;         /* 匹配标志, 取值: CTMF_PARTIAL / CTMF_FULL */
    _U8  ucSystemFlag;        /* 当前是否全局模式     */
    _S8  *szToken;            /* 当前所获取的token    */
}CI_POINTER_T;
typedef CI_POINTER_T *CI_POINTER_P;


/* -------------------------------- 对外接口函数外部引用 ------------------------------ */

/* 命令解析的函数声明 */
_U32 CI_IntpKernelProc(CT_WS_P pWS);
CT_USERTYPE_T * CT_GetUserType(_U32 ulType);
_U32 CT_ValidateUserType(_U32 ulType);
_U32 CI_GetCmdToken( _S8 **szCmdString, _S8 *szToken,
                     _U32 *ulStatus,      CI_POINTER_P pPointer);
_S8 *CI_GetInteractiveObject(CI_POINTER_P pPointer, _U32 ulStatus, _S8 *szSelect);
_S8 *CI_GetInteractiveParameter(CI_POINTER_P pPointer, _S8 *szSelect);
_S8 *CI_GetInteractiveValue(CI_POINTER_P pPointer, _S8 *szSelect);
_U32 CI_GetCmdTokenFromUser( _S8 *szToken, _U32 ulStatus, CI_POINTER_P pPointer );
_U32 CI_GetCmdTokenFromBuffer( _S8 **szCmdString, _S8 *szToken, _U32 *ulStatus );
_VOID CI_GetTailString(_S8 **szCmdString, _S8 *szToken);
_U32 CI_CheckElementObject(_S8 *szToken, CI_POINTER_P pPointer, _U32 *pulStatus );
_U32 CI_CheckElementParameter(_S8 *szToken, CI_POINTER_P pPointer,  _U32 *pulStatus );
_U32 CI_CheckElementValue( _S8 *szToken, CI_POINTER_P pPointer, _U32 *pulStatus );
_U32 CI_CheckElement(_S8 *szToken, CI_POINTER_P pPointer, _U32 *pulStatus);
_U32 CI_UserPermitted(_U32 ulLevel, CT_OBJECT_P pObject, _U32 ulStatus);
_U32 CI_GetUserRightLevel(CT_WS_P pWS);
_U32 CI_IsObjectExecutable(CT_OBJECT_P pObject, _U32 ulStatus);
_U32 CI_back_vtop( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_back_ptop( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_back_ptoo( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_AdjustParam(CI_POINTER_P pPointer);
_U32 CI_GetNextElement_O( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_GetNextElement_P( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_GetNextElement_V( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_GetExpectedElement( CI_POINTER_P pPointer, _U32 * pulStatus );
_U32 CI_TakeAction(CT_OBJECT_P pObject, _U32 ulStatus, CT_WS_P pWS);
_U32 CI_GetNewMode(CT_OBJECT_P pObject);
_U32 CI_GetExitMode(_U32 ulMode);
_U32 CI_GetEndMode(_VOID);
_U32 CI_GetModeTotalParams(_U32 ulMode);
_U32 CI_CmdPush(CT_CMD_STACK_P pStk, _S8 *s, _U32 ulMode);
_U32 CI_CmdPop(CT_CMD_STACK_P pStk, _S8 *s);
_U32 CI_ConvertMode( CT_OBJECT_P pObject, CT_WS_P pWS );
CT_MODE_T *CI_GetMode(_U32 ulMode);
_S8 *CI_GetModePrompt(_U32 ulMode);
_VOID CI_MatchMore(_S8 *szResult,_S8 *szNew);
_S8 *CI_SetPatch(_S8 *szBase,_S8 *szResult);
_U32 CI_MatchKeywords(_S8 *szToken,CT_SERIAL_WORD_P pKeyword,CI_POINTER_P pPointer);
_U32 CI_IfCommandHelp(CT_WS_P pWS);
_U32 CI_PrintHelpString(_S8 *szString);
_U32 CI_GetObjectHelpString(_S8 *szString,_S8 helpStr[128]);
_U32 CI_ShowCommandHelp( CT_OBJECT_P pObject, CI_POINTER_P pPointer, _U32 ulStatus);
_U32 CI_GetSubObjectsNumber(CT_OBJECT_P pObject, CI_POINTER_P pPointer, _U32 ulStatus);
_U32 CI_ShowObjectHelp( CT_OBJECT_P pObject, CI_POINTER_P pPointer, _U32 ulStatus, _S8 *pszToken);
_U32 CI_ShowHelp( CI_POINTER_P pPointer, _U32 ulCurMode, _U32 ulStatus);
_U32 CI_GetString(_S8 *szString, _U32 ulLength);
_U32 CI_BrotherParameterOptional(CT_PARAMETER_P *ppParam);
_U32 CI_BrotherValueOptional(CT_VALUE_P *ppValue);
_U32 CI_SetCommandString( _S8 *szCmd, CT_WS_P pWS );
_S8 *CI_GetCommandPatch(CT_WS_P pWS, _U32 ulCmdLen);
_U32 CI_SaveParameter( _S8 *szToken, _S8 *szName, _U32 ulIndex, CT_WS_P pWS );
_U32 CI_GetCmdWord(_U32 ulIndex, _U32 ulTermID, _S8 *Outp);
_S8 * CI_GetParameter( _U32 ulIndex, CT_WS_P pWS );
_S8  * CT_GetParamByName(const _S8 *szName, _U32 ulTermID);
_S8 * CI_GetModeParameter( _U32 ulMode, _U32 ulIndex, _U32 ulTermId);
_S8 * CI_GetCurrentPrompt(CT_WS_P pWS);
_U32 CI_ResetIndexTable(CT_WS_P pWS);
_U32 CI_SetWSStatus(CT_WS_P pWS, _U32 ulStatus);
_U32 CI_FindModeIdx(_U32 ulMode, _S8 * szModeName);
_VOID CI_EnterMode(_U32 ulMode, _S8 *szModeNme);
_U32 CI_ExitMode(_U32 ulMode, _S8 *szModeName);
_U32 CI_DelMode(_U32 ulMode, _S8 * szModeName);
_U32 CI_CmdBufProcess ( PTerm_Data_S pTermStruct );
_U32 CI_CmdExecute ( PTerm_Data_S pTermStruct );
_U32 CI_SetPromptLen(_U32 ulStrLen);
_VOID CI_DisplayPrompt ( PTerm_Data_S pTermStruct );

#endif

⌨️ 快捷键说明

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