📄 cli_lib.c
字号:
/************************************************************************
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 + -