亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美放荡的少妇| 国产精品欧美一区二区三区| 精品国产欧美一区二区| 国产精品黄色在线观看| 美女国产一区二区三区| 91色九色蝌蚪| 久久蜜桃av一区精品变态类天堂| 亚洲三级小视频| 国产曰批免费观看久久久| 在线观看日韩电影| 国产精品成人网| 日本亚洲天堂网| 欧美日韩一区视频| 亚洲日本免费电影| 高清shemale亚洲人妖| 日韩一本二本av| 亚洲成av人片在线观看| 91视视频在线观看入口直接观看www | 成人一二三区视频| 日韩福利电影在线| 91国产丝袜在线播放| 中文字幕免费一区| 国产成人精品1024| www国产成人| 老司机免费视频一区二区三区| 欧美亚一区二区| 亚洲精品成人在线| 91丨porny丨国产入口| 国产精品视频免费看| 国产·精品毛片| 久久综合给合久久狠狠狠97色69| 蜜桃91丨九色丨蝌蚪91桃色| 91精品国产综合久久精品麻豆| 亚洲国产欧美另类丝袜| 色哟哟国产精品免费观看| 亚洲精品五月天| 91亚洲国产成人精品一区二区三| 综合欧美亚洲日本| www.视频一区| 亚洲综合男人的天堂| 在线观看国产一区二区| 亚洲在线免费播放| 欧美无乱码久久久免费午夜一区| 午夜免费久久看| 欧美一区二区三区四区在线观看| 天使萌一区二区三区免费观看| 7777女厕盗摄久久久| 日本vs亚洲vs韩国一区三区| 欧美成人video| 国产成人午夜视频| 亚洲人成7777| 欧美精品久久99| 久久99精品久久久久婷婷| 国产情人综合久久777777| 成人久久久精品乱码一区二区三区| 亚洲国产电影在线观看| 日本韩国欧美在线| 奇米影视一区二区三区小说| 久久中文娱乐网| 色综合中文综合网| 久久久久久夜精品精品免费| 成人av在线影院| 亚洲国产综合91精品麻豆| 日韩欧美成人午夜| 国产成人三级在线观看| 亚洲精品网站在线观看| 欧美v国产在线一区二区三区| 国产成人午夜99999| 亚洲超丰满肉感bbw| 精品久久人人做人人爽| 一本久久a久久免费精品不卡| 亚洲高清免费视频| 中文字幕不卡在线| 欧美蜜桃一区二区三区| 国产传媒久久文化传媒| 亚洲精品成人精品456| 日韩午夜精品电影| 色综合天天综合网国产成人综合天| 亚洲va国产va欧美va观看| 久久久久久综合| 欧美精品一区二区在线播放| 99精品久久99久久久久| 免费成人美女在线观看.| 一二三四区精品视频| 久久亚区不卡日本| 欧美电影一区二区三区| 成人av在线播放网址| 久久er99精品| 亚洲地区一二三色| 亚洲欧美另类综合偷拍| 久久久美女毛片| 欧美一级爆毛片| 欧美日韩三级视频| 91丨九色丨国产丨porny| 国产一区二区三区四区在线观看| 亚洲国产视频一区二区| 亚洲欧美日韩久久精品| 国产精品欧美久久久久无广告| 日韩视频在线永久播放| 欧美亚洲动漫制服丝袜| 日本韩国一区二区| 91色.com| 不卡视频免费播放| 成人午夜碰碰视频| 国产一二三精品| 蜜臀av一区二区在线免费观看| 天天射综合影视| 夜夜嗨av一区二区三区四季av| 成人免费在线观看入口| 国产女人18毛片水真多成人如厕 | 国产中文字幕精品| 日韩电影网1区2区| 日韩av中文字幕一区二区| 日韩中文欧美在线| 日韩精品国产精品| 婷婷综合五月天| 视频在线观看一区二区三区| 亚洲国产成人tv| 午夜精品爽啪视频| 日韩综合小视频| 麻豆精品久久精品色综合| 久久国产精品99久久人人澡| 黄色资源网久久资源365| 久久精品国产久精国产| 精品一区二区在线免费观看| 黄色小说综合网站| 国产99久久久久久免费看农村| 国产成人免费xxxxxxxx| aa级大片欧美| 欧美亚洲综合久久| 777色狠狠一区二区三区| 欧美成人精品高清在线播放| 久久久五月婷婷| 中文字幕日韩av资源站| 亚洲午夜羞羞片| 老司机免费视频一区二区三区| 国内精品国产三级国产a久久| 国产精品538一区二区在线| 成人少妇影院yyyy| 欧美影院一区二区| 日韩欧美区一区二| 国产精品久久久久久妇女6080| 亚洲精品欧美激情| 久久av资源网| 懂色av一区二区三区免费观看| 一本大道av一区二区在线播放| 欧美精品123区| 久久精品人人做人人综合| 最新日韩在线视频| 喷白浆一区二区| 波多野结衣在线aⅴ中文字幕不卡| 91黄色免费网站| 欧美大片免费久久精品三p| 国产精品美女久久久久久| 亚洲午夜激情网站| 国产一区二区三区免费看| 欧美精品 国产精品| 久久中文字幕电影| 亚洲一区二区成人在线观看| 美日韩一区二区| 91一区二区在线| www国产成人免费观看视频 深夜成人网| 国产精品国产自产拍高清av | 成人a级免费电影| 欧美老女人第四色| 国产精品国产成人国产三级 | 欧美高清在线精品一区| 香蕉加勒比综合久久| www.爱久久.com| 91精品久久久久久久91蜜桃| 国产精品国产成人国产三级| 九色综合国产一区二区三区| 91毛片在线观看| 国产亚洲精品久| 日韩精品一卡二卡三卡四卡无卡| voyeur盗摄精品| 精品人在线二区三区| 水蜜桃久久夜色精品一区的特点| 91在线码无精品| 国产欧美一区视频| 精品影视av免费| 日韩午夜电影在线观看| 亚洲成人免费观看| 91高清在线观看| 136国产福利精品导航| 国产福利一区在线| 26uuu国产电影一区二区| 免费一级欧美片在线观看| 欧美色综合网站| 一区二区在线免费| 91麻豆产精品久久久久久| 欧美在线短视频| 播五月开心婷婷综合| 久久久www免费人成精品| 久久丁香综合五月国产三级网站| 3751色影院一区二区三区| 亚洲综合一区二区三区| 在线看国产一区二区| 一区二区欧美国产| 在线观看视频欧美|