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

📄 cli_lib.c

📁 命令行在嵌入式系统的实现
💻 C
📖 第 1 页 / 共 3 页
字号:
/************************************************************************
Copyright 200X - 200X+1.

filename     : CLI_Lib.c

description  : CLI内部库实现.

author       : Woodhead

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

#include "Ros.h"
#include "CLI_Private.inc"
/**************************************************************************
* PROTOTYPE : _S32 _isfloatstr(_S8 * pStr)                                  *
* FUNCTION  : Check if a string is a valid float string?                  *
* INPUTS    : pStr = Pointer to the string to be checked                  *
* OUTPUTS   :                                                             *
* RETURNS   : 0 : YES; Other : NO                                         *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 _isfloatstr(_S8 * pStr)
{
    _S8 * p;
    _S8 dot;  /* dot already found */

    if(pStr == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    dot = 0;
    p = pStr;

    /* Check the first character */
    if(!isdigit(*p))
    {
        if(*p == '-')
        {
            p++;
        }
        else if((*p++) == '.')
        {
            dot = 1;
        }
        else
        {
            return G_FAILURE;
        }
    }

    /* Check the left part of the string */
    while(*p)
    {
        if( !isdigit(*p) )
        {
            if(*p == '.')
            {
                if(dot == 0)
                {
                    dot = 1;
                }
                else
                {
                    return G_FAILURE;
                }
            }
            else
            {
                return G_FAILURE;
            }
        }
        p++;
    }

    return G_SUCCESS;

} /* End of function _isfloatstr() */

/**************************************************************************
* PROTOTYPE : _S32 _isintstr(_S8 * pStr)                                    *
* FUNCTION  : Check if a string is a valid integer string?                *
* INPUTS    : pStr = Pointer to the string to be checked                  *
* OUTPUTS   :                                                             *
* RETURNS   : 0 : YES; Other : NO                                         *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 _isintstr(_S8 * pStr)
{
    _S8 * p;

    if(pStr == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    p = pStr;
    if((!isdigit(*p)) && (*p++ != '-'))
        return G_FAILURE;
    while(*p)
    {
        if( !isdigit(*p) )
            return G_FAILURE;
        p++;
    }

    return G_SUCCESS;
} /* End of function _isintstr() */

/**************************************************************************

 Function Name    : _btrim

 Description.     :

 Calls            :

 Called By        :

 Table Accessed   : None

 Table Updated    : None

 Input            :

 Output           :

 Return           :

 Others           : None

**************************************************************************/
_S8 * _btrim (_S8 * pStr)
{
    _S8* p = _ltrim(pStr);

    return _rtrim(p);
}

/**************************************************************************

 Function Name    : _ltrim

 Description.     :

 Calls            :

 Called By        :

 Table Accessed   : None

 Table Updated    : None

 Input            :

 Output           :

 Return           :

 Others           : None

**************************************************************************/
_S8* _ltrim(_S8 *pStr)
{
    _S8* p;

    if((pStr == G_NULL) || (*pStr == 0))
    {
        return pStr;
    }

    p = pStr;

    while (*p == ' ' || *p == '\t')
        p++;

    return p;
}

/**************************************************************************

 Function Name    : _rtrim

 Description.     :

 Calls            :

 Called By        :

 Table Accessed   : None

 Table Updated    : None

 Input            :

 Output           :

 Return           :

 Others           : None

**************************************************************************/
_S8* _rtrim(_S8 *pStr)
{
    _S8* p;

    if((pStr == G_NULL) || (*pStr == 0))
    {
        return pStr;
    }

    p = &pStr[strlen(pStr) - 1];

    while (*p == ' ' || *p == '\t')
        *p-- = '\0';

    return pStr;
}

/*==============================================================*/
/*      函数名      :_TrimString                                 */
/*      函数功能    :出去字符穿的前后空格                       */
/*      输入参数    :_S8 * pacSrc                              */
/*      输出参数    :_S8* pacDst                               */
/*      返回值      :无                                         */
/*      调用函数    :                                           */
/*      被调函数    :                                           */
/*==============================================================*/
_VOID _TrimString( _S8* pDst, _S8 * pSrc )
{
    _U32 ulFlag = 0;           /* 串标志,0:前,1:中,2:尾 */
    _U32 ulPreMidBlock = 1;    /* 前一字符第一个中间空格,0:no,1:yes */

    if (pDst == G_NULL || pSrc == G_NULL)
    {
        MT_ERRLOG(0);
        return ;
    }

    for( ; 0 != *pSrc; )
    {
        if( 0 == ulFlag )
        {
            if( 0x20 != *pSrc )
            {
                *pDst++ = *pSrc;
                ulFlag = 1;
                ulPreMidBlock = 0;
            }
            pSrc ++;
        }
        else
        {
            if( 0 == ulPreMidBlock )
            {
                if( 0x20 == *pSrc )
                {
                    ulPreMidBlock = 1;
                }
                *pDst++ = *pSrc++;
            }
            else
            {
                if( 0x20 != *pSrc )
                {
                    ulPreMidBlock = 0;
                    *pDst++ = *pSrc;
                }
                pSrc ++;
            }
        }
    }

    *pDst = 0 ;
    return ;
}

/**************************************************************************
* PROTOTYPE : _U32 strmatch(_S8 *s8Src, _S8 *s8Dest)                   *
* FUNCTION  : Matching the source string with destination string          *
* INPUTS    : s8Src  = Source string to be matched                        *
*             s8Dest = Destination string to be matched.                  *
* OUTPUTS   :                                                             *
* RETURNS   : 0 : G_SUCCESS; Other : FAILED                                 *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 strmatch(_S8 *s8Src, _S8 *s8Dest)
{
    _S8 *src,*dest;

    if((s8Src == G_NULL) || (s8Dest == G_NULL))
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    src = s8Src;
    dest = s8Dest;

    /* Empty source string and longer source string cause an error */
    if((*src == 0) || (strlen(src) > strlen(dest)))
    {
        return G_FAILURE;
    }

    while(*src!=0)
    {
        if(toupper(*src)!=toupper(*dest))
        {
            return G_FAILURE;
        }
        src++;
        dest++;
    }

    /* The return value 0 stands for matching successfully */
    return G_SUCCESS;

} /* End of function strmatch() */

/**************************************************************************
* PROTOTYPE : _S32 _isempty(_S8 * pStr)                                     *
* FUNCTION  : Check if a string is an empty one?                          *
* INPUTS    : pStr = Pointer to the string to be checked                  *
* OUTPUTS   :                                                             *
* RETURNS   : 0 : YES; Other : NO                                         *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 _isempty(_S8 * pStr)
{

    if(pStr == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    if(*pStr == 0)
    {
        return G_SUCCESS;
    }
    else
    {
        return G_FAILURE;
    }

} /* End of function _isempty() */


/**************************************************************************
* PROTOTYPE : _S32 _VerifyFixedString(_S8 *pStr, _U32 ulLen)                *
* FUNCTION  : Check if a string is a valid Fixed-length one.              *
* INPUTS    : szNum = Pointer to the string to be checked                 *
*             ulLen= Fixed Length of string                              *
* OUTPUTS   :                                                             *
* RETURNS   : 0 : YES; Other : NO                                         *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 _VerifyFixedString(_S8 *pStr, _U32 ulLen)
{
    if(pStr == G_NULL)
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    if((_U32)strlen(pStr) == ulLen)
    {
        return G_SUCCESS;
    }
    else
    {
        return G_FAILURE;
    }
} /* End of function _VerifyFixedString() */


/**************************************************************************
* PROTOTYPE : _S32 _VerifyAndCvtDwordI(_S8 *szNum, _S32 dwLow,           *
*                                     _S32 dwHigh, _S32 *pdwValue)        *
* FUNCTION  : Check a integer string and convert it.                      *
* INPUTS    : szNum = Pointer to the string to be checked                 *
*             fLow  = Lower limit                                         *
*             fHigh  = Higher limit                                       *
* OUTPUTS   : pfValue  = Unsigned Integer Value Converted                 *
* RETURNS   : 0 : G_SUCCESS; Other : FAILED                                 *
* REQUEST   : None                                                        *
* DATA TYPE : None                                                        *
* WORK FLOW : Omit                                                        *
* CALLED BY : Anywhere                                                    *
* OTHERS    : None                                                        *
***************************************************************************/
_U32 _VerifyAndCvtDwordI(_S8 * szNum, _S32 dwLow, _S32 dwHigh, _S32 * pdwValue)
{
    _S32 dwData;
    _S8 *pTemp, buf[32];

    if((szNum == G_NULL) || (pdwValue == G_NULL))
    {
        MT_ERRLOG(0);
        return G_FAILURE;
    }

    pTemp = _btrim(szNum);

    if (!strlen (pTemp) || _isintstr (pTemp) != 0)
        return G_FAILURE;

    dwData = atol (pTemp);
    EOS_Sprintf (buf, "%d", dwData);
    while (*pTemp == '0' && *(pTemp + 1) != 0)
        pTemp ++;
    if (strcmp (pTemp, buf))
        return G_FAILURE;

    if ((dwData < dwLow) || (dwData > dwHigh))
         return G_FAILURE;
    *pdwValue = dwData;

    return G_SUCCESS;

} /* End of function _VerifyAndCvtDwordI() */

/**************************************************************************
  Function Name    : _VerifyAndCvtDword

⌨️ 快捷键说明

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