亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cli_cmdreg.c

?? 命令行在嵌入式系統的實現
?? C
?? 第 1 頁 / 共 5 頁
字號:
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Cmdreg.c

description  : 命令行的命令樹構造與命令注冊接口的提供

author       : Woodhead

modification : Woodhead    create              2004-12-07
************************************************************************/

#include "Ros.h"
#include "ML.h"
#include "Sys_Ml.h"
#include "Cli_MlPriv.h"
#include "CLI_Private.inc"
#include "Cli_intp.inc"
#include "CLI_Io.h"
#include "Config\Cli_ConfigGlbVar.h"

extern _U32 RADIUS_AuthMode( _U32 ulTermId );

CT_MODE_T m_sCliSysModes[MAX_MODE_NUM];    /* 命令樹 */
CT_USERTYPE_T m_sCliUserType[CT_MAX_USERTYPES]; /* 用戶類型 */

/*********************************************************************/
/* 函數名稱 : CT_RegModes()                                          */
/* 函數功能 : 命令行所有模式的注冊                                   */
/* 輸入參數 : 無                                                     */
/* 輸出參數 : 無                                                     */
/* 返回     : 無                                                     */
/* 上層函數 : 初始化過程中調用                                       */
/* 修改記錄 :                                                        */
/*********************************************************************/
_U32 CT_RegModes(_VOID)
{
    if(CT_SetMode(CTM_GENL,"Root Mode",">>", "enable",
                    CT_AL_QUERY, NULL_MODE, G_NULL) != G_SUCCESS)
    {
        return G_FAILURE;
    }

    if(CT_SetMode(CTM_CONFIG,"Config Mode",">>config>","configure",
                CT_AL_OPERATOR,CTM_GENL,G_NULL) != G_SUCCESS)
    {
        return G_FAILURE;
    }

    if(CT_SetMode(CTM_GLOBAL,"Global Mode",">>",
                "global",CT_AL_QUERY, NULL_MODE,G_NULL) != G_SUCCESS)
    {
        return G_FAILURE;
    }

    if(CT_SetMode(CTM_DIAG,"Diagnose Mode","%%",
                "diagnose",CT_AL_DEBUG, CTM_GENL,G_NULL) != G_SUCCESS)
    {
        return G_FAILURE;
    }

#if CLI_DEBUG_ON
    if(CT_SetMode(CTM_DBG, "Debug Mode",">>debug%%",
                "debug",CT_AL_SUPER,CTM_GENL,G_NULL) != G_SUCCESS)
    {
        return G_FAILURE;
    }
#endif

    /* 產品相關的命令行模式注冊 */
    if( G_NULL != g_pfn_CFG_CT_ProdRegModes )
    {
        if( G_SUCCESS != g_pfn_CFG_CT_ProdRegModes() )
        {
            return G_FAILURE;
        }
    }

    return G_SUCCESS;

}

/*********************************************************************/
/* 函數名稱 : CT_RegModeCmd()                                        */
/* 函數功能 : 所有模式的進入命令注冊                                 */
/* 輸入參數 : 無                                                     */
/* 輸出參數 : 無                                                     */
/* 返回     : 無                                                     */
/* 上層函數 : 初始化過程中調用                                       */
/* 修改記錄 :                                                        */
/*********************************************************************/
_U32 CT_RegModeCmd(_VOID)
{
    _U32 ulRet = 0;
    ulRet += CT_CmdAutoRegistEx(CMD_CM "configure",
                               CTM_GENL,
                               CT_AL_OPERATOR,
                               G_NULL,
                               CT_MC_NEW,
                               CTM_CONFIG,
                               CMDHELP_GLB_CM,
                               CMDHELP_GENL_CM_CONFIGURE,
                               CLI_ML_NULL);
    ulRet += CT_CmdAutoRegistEx(CMD_CM "diagnose",
                               CTM_GENL,
                               CT_AL_DEBUG,
                               CLI_EnterDiagMode,
                               CT_MC_NEW,
                               CTM_DIAG,
                               CMDHELP_GLB_CM,
                               CMDHELP_GENL_CM_DIAGNOSE,
                               CLI_ML_NULL);
#if CLI_DEBUG_ON
    ulRet += CT_CmdAutoRegistEx(CMD_CM "debug",
                               CTM_GENL,
                               CT_AL_SUPER,
                               G_NULL,
                               CT_MC_NEW,
                               CTM_DBG,
                               CMDHELP_GLB_CM,
                               CMDHELP_GENL_CM_DEBUG,
                               CLI_ML_NULL);
#endif

    if (ulRet != G_SUCCESS)
    {
        return G_FAILURE;
    }

    /* 產品相關的命令行模式注冊 */
    if( G_NULL != g_pfn_CFG_CT_ProdRegModeCmd )
    {
        return g_pfn_CFG_CT_ProdRegModeCmd();
    }

    return G_SUCCESS;


}

/*********************************************************************/
/* 函數名稱 : CT_InitUserType()                                      */
/* 函數功能 : 可供用戶自己擴展的參數值數據結構初始化                 */
/* 輸入參數 : 無                                                     */
/* 輸出參數 : 無                                                     */
/* 返回     : 無                                                     */
/* 上層函數 : 初始化過程中調用                                       */
/* 創建者   : Liuzequn                                               */
/* 修改記錄 :                                                        */
/*********************************************************************/
_VOID  CT_InitUserType(_VOID)
{
    _U32 i;

    for(i = 0; i < CT_MAX_USERTYPES; i++)
    {
        m_sCliUserType[i].ucTypeID = 0;
        m_sCliUserType[i].szTypeName[0] = 0;
        m_sCliUserType[i].pCheckFunc = G_NULL;
    }

    return ;
}

/*  系統模式結構數組初始化  */
_VOID  CT_InitSysModes(_VOID)
{
    _U32 ulCountTemp;

    for(ulCountTemp = 0; ulCountTemp < MAX_MODE_NUM; ulCountTemp++)
    {
        m_sCliSysModes[ulCountTemp].ulMode          = NULL_MODE;
        m_sCliSysModes[ulCountTemp].szModeName[0]   = 0;
        m_sCliSysModes[ulCountTemp].szModePrompt[0] = 0;
        m_sCliSysModes[ulCountTemp].szModeVerb[0]   = 0;
        m_sCliSysModes[ulCountTemp].rightLevel      = CT_AL_QUERY;
        m_sCliSysModes[ulCountTemp].ulParent        = NULL_MODE;
        m_sCliSysModes[ulCountTemp].pObject         = G_NULL;
        m_sCliSysModes[ulCountTemp].ulHierarchy     = 0;
        m_sCliSysModes[ulCountTemp].ulParamCount    = 0;
    }

    return ;
}

_U32 CT_InitModeObject(_VOID)
{
    CT_OBJECT_P pObj;

    pObj = CT_CreateObject("GENERAL", CTM_GENL, CT_AL_QUERY,
                            G_NULL, G_FALSE, CT_MC_NULL, G_NULL);
    if(pObj == G_NULL)
        return G_FAILURE;

    if(CT_RegModeObject(ROOT_MODE,pObj,0) != G_SUCCESS)
    {
        return G_FAILURE;
    }

    pObj = CT_CreateObject("GLOBAL", CTM_GLOBAL, CT_AL_QUERY,
                            G_NULL, G_FALSE, CT_MC_NULL, G_NULL);
    if(pObj == G_NULL)
        return G_FAILURE;

    if (CT_RegModeObject(CTM_GLOBAL,pObj,0) != G_SUCCESS)
    {
        return G_FAILURE;
    }

    return G_SUCCESS;
}

_U32  CT_InitCmdTree(_VOID)
{
    if(CT_RegModes() != G_SUCCESS)
    {
        EOS_Printf("\r\n  Mode initial failed!");
        return G_FAILURE;
    }

    if(CT_InitModeObject() != G_SUCCESS)
    {
        EOS_Printf("\r\n  Root object register failed!");
        return G_FAILURE;
    }

    if(CT_RegModeCmd() != G_SUCCESS)
    {
        EOS_Printf("\r\n  Mode command register failed");
        return G_FAILURE;
    }

    return G_SUCCESS;
}

_U32 CT_RegisterUserType(_U32 *ulID,_S8 *szName,CT_TYPECHECK_FUNC_T pFunc)
{
    _U32 i;

    if((ulID == G_NULL) || (pFunc == G_NULL))
    {
        return G_FAILURE;
    }

    for(i = 0; i < CT_MAX_USERTYPES; i++)
    {
        if(m_sCliUserType[i].ucTypeID != (CT_DATA_USER+i))
        {
            if(m_sCliUserType[i].ucTypeID == 0)
            {
                m_sCliUserType[i].ucTypeID = (_U8)(CT_DATA_USER + i);
                if(szName != G_NULL)
                {
                    EOS_StrCpy(&m_sCliUserType[i].szTypeName[0],szName);
                }
                m_sCliUserType[i].pCheckFunc = pFunc;
                *ulID = m_sCliUserType[i].ucTypeID;
                return G_SUCCESS;
            }
            else
            {
                return G_FAILURE;
            }
        }
    }

    return G_FAILURE;
}


_U32 CT_FreeValue( CT_VALUE_P pValue )
{
    CT_VALUE_P pTemp,pValueNext;

    if(pValue == G_NULL)
        return G_FAILURE;

    pTemp = pValue;

    while( pTemp != G_NULL )
    {
        pValueNext = pTemp->pNext;

        /* 1、釋放名字 */
        if(pTemp->szName != G_NULL) ROS_MemFree(pTemp->szName);


        /* 2、釋放關鍵字 */
        if(pTemp->keywords.pKeyword != G_NULL)
            if(CT_FreeKeyword(pTemp->keywords.pKeyword) != G_SUCCESS)
            {
                //統計
            }

        /* 3、釋放自己 */
        ROS_MemFree(pTemp);
        pTemp = pValueNext;

    }

    return G_SUCCESS;
}


_U32 CT_FreeKeyword(CT_SERIAL_WORD_P pKW)
{
    CT_SERIAL_WORD_P pKeyW, pNextKW;

    if(pKW == G_NULL)
        return G_FAILURE;

    pKeyW = pKW;

    while(pKeyW != G_NULL)
    {
        pNextKW = pKeyW->pNext;

        if(pKeyW->pK != G_NULL)
        {
            ROS_MemFree(pKeyW->pK);
        }

        ROS_MemFree(pKeyW);

        pKeyW = pNextKW;

    }

    return G_SUCCESS;
}

CT_SERIAL_WORD_P CT_NewKeywords(_S8 *szKeys, _U32 *ulCount)
{
    CT_SERIAL_WORD_P pKeyWord = G_NULL, p1 = G_NULL, pReturn = G_NULL;
    _S8 *TmpKey, KeyStr[MAX_TOKEN_SIZE];
    _U32 i;

    if((szKeys == G_NULL) || (ulCount == G_NULL))
        return G_NULL;

    *ulCount = 0;

    TmpKey = szKeys;
    i = 0;
    KeyStr[0] = 0;
    while(*TmpKey != 0)
    {
        if(*TmpKey == KEY_SPACE)
        {
            TmpKey++;
            continue;
        }
        else if(*TmpKey == ',')
        {
            if(i == 0)
            {
                TmpKey++; continue;
            }

            pKeyWord = CT_NewKeyword();
            if(pKeyWord == G_NULL)
                return G_NULL;
            pKeyWord->pK = ROS_MemAlloc(i+1, ROS_MEM_ALLOC_OPT_NONE);
            if(pKeyWord->pK == G_NULL)
            {
                    if(CT_FreeKeyword(pKeyWord) != G_SUCCESS)
                    {
                        //統計
                    }
                return G_NULL;
            }
            KeyStr[i]=0;
            EOS_StrCpy(pKeyWord->pK,&KeyStr[0]);
            (*ulCount)++;

            if(p1 != G_NULL)
            {
                p1->pNext = pKeyWord;
                pKeyWord->pPrevious = p1;
            }
            else
            {
                if(pReturn == G_NULL)
                    pReturn = pKeyWord;
            }
            p1 = pKeyWord;
            TmpKey++;
            i = 0;
            KeyStr[0] = 0;
        }
        else
        {
            KeyStr[i++] = *TmpKey++;
            if(i > 79)
                return G_NULL;
        }
    }

    if(i > 0)
    {
        pKeyWord = CT_NewKeyword();
        if(pKeyWord == G_NULL)
            return G_NULL;
        pKeyWord->pK = ROS_MemAlloc(i+1, ROS_MEM_ALLOC_OPT_NONE);
        if(pKeyWord->pK == G_NULL)
        {
                if(CT_FreeKeyword(pKeyWord) != G_SUCCESS)
                {
                    //統計
                }

            return G_NULL;
        }
        KeyStr[i]=0;
        EOS_StrCpy(pKeyWord->pK,&KeyStr[0]);
        (*ulCount)++;

        if(p1 != G_NULL)
        {
            p1->pNext = pKeyWord;
            pKeyWord->pPrevious = p1;
        }
        else
        {
            if(pReturn == G_NULL)
                pReturn = pKeyWord;
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
youjizz国产精品| 人人狠狠综合久久亚洲| 91日韩一区二区三区| 中文字幕不卡一区| 成人h动漫精品| 1区2区3区国产精品| 一本久久综合亚洲鲁鲁五月天| 日韩一区在线看| 一本一道波多野结衣一区二区| 日韩美女啊v在线免费观看| 91麻豆成人久久精品二区三区| 亚洲制服丝袜av| 欧美一区二区三区电影| 激情小说亚洲一区| 亚洲视频一区二区在线观看| 欧美性极品少妇| 韩国三级电影一区二区| 国产精品久线在线观看| 欧美色大人视频| 看片的网站亚洲| 亚洲国产成人午夜在线一区| 91久久国产最好的精华液| 免费的国产精品| 中文字幕一区二区不卡| 91麻豆精品国产91久久久| 国产精品综合二区| 亚洲自拍都市欧美小说| 久久婷婷国产综合精品青草| 97超碰欧美中文字幕| 丝袜美腿亚洲一区| 国产精品―色哟哟| 51久久夜色精品国产麻豆| 国产福利精品一区二区| 亚洲一区二三区| 国产欧美日韩综合| 欧美男女性生活在线直播观看| 国产精品一区一区| 丝袜美腿一区二区三区| 国产精品久久久久久久久搜平片| 欧美美女一区二区在线观看| www.色精品| 久久99热狠狠色一区二区| 亚洲视频一二三区| 精品国产sm最大网站| 欧美手机在线视频| 国产91丝袜在线播放九色| 五月婷婷色综合| 中文字幕制服丝袜成人av | 亚洲成人av电影| 日本一区二区电影| 日韩精品一区二区三区视频播放| 日本高清不卡视频| 成人性生交大片| 老鸭窝一区二区久久精品| 亚洲一区二区三区国产| 国产精品的网站| 久久免费电影网| 日韩免费观看高清完整版在线观看| 欧美综合色免费| av一区二区三区四区| 国产一区二区三区高清播放| 奇米影视一区二区三区| 亚洲va国产天堂va久久en| 一区二区三区在线视频观看58| 国产免费久久精品| 26uuu国产电影一区二区| 日韩视频在线你懂得| 91精品国产一区二区三区蜜臀| 91黄视频在线| 91美女片黄在线观看| 91在线精品秘密一区二区| 成人免费高清视频在线观看| 国产精品99久久久| 国产精品夜夜嗨| 狠狠色综合播放一区二区| 久久69国产一区二区蜜臀| 麻豆成人91精品二区三区| 日韩av电影天堂| 日韩高清不卡在线| 日日骚欧美日韩| 麻豆精品蜜桃视频网站| 美女一区二区在线观看| 奇米一区二区三区| 精品一区二区三区影院在线午夜| 美腿丝袜在线亚洲一区 | 麻豆精品国产传媒mv男同| 日韩av一级片| 极品少妇xxxx精品少妇偷拍| 国产精品一级二级三级| 国产99久久久国产精品潘金| 成人小视频在线| 色综合久久久网| 欧美精品乱人伦久久久久久| 日韩欧美国产一二三区| 久久久久国产精品麻豆| 国产精品免费视频观看| 亚洲欧美日韩国产成人精品影院| 一区二区三区毛片| 日韩制服丝袜av| 国产一区视频导航| 成人午夜电影久久影院| 91麻豆成人久久精品二区三区| 欧美视频在线观看一区二区| 日韩一区二区三区三四区视频在线观看| 精品蜜桃在线看| 国产精品美女久久久久av爽李琼 | 91麻豆精东视频| 欧美日韩激情一区二区三区| 精品日韩在线观看| 中文字幕一区二区三区蜜月| 午夜一区二区三区视频| 国产一区二区三区精品欧美日韩一区二区三区| 国产成a人无v码亚洲福利| 在线免费观看视频一区| 日韩欧美二区三区| 国产精品网站在线观看| 午夜影院在线观看欧美| 国产精选一区二区三区| 欧美午夜视频网站| 久久久久久久久久美女| 一区二区三区精品在线观看| 免费观看成人av| 91香蕉视频污在线| 欧美一级黄色大片| 亚洲视频每日更新| 美女爽到高潮91| 色一区在线观看| 国产清纯在线一区二区www| 亚洲国产精品综合小说图片区| 久久99久国产精品黄毛片色诱| 91亚洲午夜精品久久久久久| 日韩欧美在线网站| 亚洲色图视频网| 韩国欧美国产一区| 欧美日韩精品一区二区三区| 国产亚洲精品中文字幕| 日韩精品久久理论片| 在线视频一区二区免费| 中文字幕欧美激情| 精品国产亚洲在线| 午夜av一区二区| 不卡一卡二卡三乱码免费网站| 亚洲伦在线观看| 91在线云播放| 色狠狠色噜噜噜综合网| 久久婷婷国产综合精品青草| 日韩精品亚洲一区| 在线观看日韩毛片| 中文字幕一区三区| 国产真实乱偷精品视频免| 欧美日韩国产一级片| 一区免费观看视频| 粉嫩av一区二区三区| 久久综合999| 九一九一国产精品| 91精品在线一区二区| 一区二区欧美精品| 色哟哟一区二区三区| 一区视频在线播放| 成人激情免费电影网址| 精品1区2区3区| 国产在线精品一区二区不卡了 | 中文字幕中文乱码欧美一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩不卡一区| 麻豆精品蜜桃视频网站| 日本一区二区三区高清不卡| 99久久婷婷国产综合精品电影| 婷婷成人激情在线网| 国产精品不卡在线| 亚洲一区二区三区在线看| 日本韩国欧美三级| 亚洲综合丝袜美腿| 欧美日韩国产123区| 五月婷婷色综合| 欧美午夜理伦三级在线观看| 亚洲一区在线视频观看| 欧美伊人精品成人久久综合97| 一区二区不卡在线视频 午夜欧美不卡在| www.欧美亚洲| 综合在线观看色| 色综合天天狠狠| 亚洲成人激情自拍| 欧美一区三区四区| 国产精品综合av一区二区国产馆| 中文欧美字幕免费| 91麻豆高清视频| 一区二区免费在线播放| 宅男噜噜噜66一区二区66| 免费在线视频一区| 精品少妇一区二区三区视频免付费 | 精品国产91乱码一区二区三区| 麻豆成人免费电影| 国产清纯在线一区二区www| 91香蕉视频mp4| 日本一不卡视频| 国产精品视频一区二区三区不卡| 91免费在线看| 麻豆免费看一区二区三区| 国产精品乱码一区二区三区软件|