#ifndef STR_UTIL_INCLUDED #define STR_UTIL_INCLUDED /************************************************************************/ /* SISCO SOFTWARE MODULE HEADER *****************************************/ /************************************************************************/ /* (c) Copyright Systems Integration Specialists Company, Inc., */ /* 2000 - 2004 All Rights Reserved */ /* */ /* MODULE NAME : str_util.h */ /* PRODUCT(S) : General Use */ /* */ /* MODULE DESCRIPTION : */ /* General purpose string manipulation functions. */ /* */ /* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */ /* */ /* MODIFICATION LOG : */ /* Date Who Rev Comments */ /* -------- --- ------ ------------------------------------------- */ /* 07/28/05 DWL 21 Use const ST_CHAR* in asciiTo* functions. */ /* 03/14/05 JRB 20 Add get_next_string. */ /* 12/03/04 JRB 19 Use strcasecmp, strncasecmp if supported. */ /* 07/09/04 JRB 18 Add strncat_safe, strncpy_safe. */ /* 03/08/04 EJV 17 Added getKeywordFromFile function. */ /* 12/12/03 JRB 16 Add LYNX support. */ /* 12/10/03 MDE 15 Added itoa/ltoa/utoa/ultoa replacements */ /* 04/10/03 DSF 14 Added strnstr */ /* 02/20/03 JRB 13 Del PSOS code. */ /* 12/20/02 CRM 12 Added "defined(linux)" for strcmpi, etc. */ /* 02/28/02 EJV 11 Added asciiToFloat, asciiToDouble. */ /* 02/25/02 EJV 10 Replaced ascii_to_ macros with asciiToxxx fun*/ /* Added asciiToUlong, asciiToUint16, */ /* asciiToUint8, asciiToSint, asciiToUint */ /* hex_to_ascii_str: added param hex_no_spaces. */ /* 12/09/01 GLB 05 Added asciiToSlong, asciiToSint16, */ /* asciiToSint8, asciiToUchar */ /* 09/10/01 GLB 08 Added ascii_to_uint & ascii_to_slongint */ /* 08/06/01 GLB 07 Added ascii_to_sint */ /* 06/06/01 GLB 06 Added ascii_to_double & ascii_to_float */ /* 05/21/01 MDE 05 Added bitstring_to_ascii_str */ /* 01/19/01 EJV 04 UNIX: added strcmpi, stricmp, strnicmp protos*/ /* 01/05/01 EJV 03 Corrected ascii_to_ushortint, AIX returned 0.*/ /* ascii_to_ulongint: changed "%ul" to "%lu". */ /* 11/02/00 MDE 02 Added _hex_no_spaces */ /* 02/03/00 JRB 01 Created */ /************************************************************************/ #ifdef __cplusplus extern "C" { #endif /************************************************************************/ /* 分配字符串指针并为其复制指定的内容,支持重复分配 */ /************************************************************************/ #ifdef _C3X #define assign_str(dst, src) \ dst = src; #else #define assign_str(dst, src) \ if (dst) chk_free(dst); dst = NULL; \ if (src) \ { \ dst = (ST_CHAR*)chk_calloc(1, strlen(src)+1); \ strcpy(dst, src); \ } #endif /************************************************************************/ /* 释放字符串指针,C3X 系统下 SCL_INFO 中的字符串不需要释放 */ /************************************************************************/ #ifdef _C3X #define free_str(str) str = NULL; #else #define free_str(str) \ if (str != NULL) chk_free(str); \ str = NULL; #endif ST_VOID hex_to_ascii_str ( ST_CHAR *astr, /* ascii string */ ST_UCHAR *hstr, /* hex string */ ST_UINT hlen, /* len of hex string */ ST_BOOLEAN hex_no_spaces); ST_RET ascii_to_hex_str ( ST_UCHAR *hstr, /* hex string */ ST_UINT *hlen_out, /* ptr to hex len to be set */ ST_UINT hlen_max, /* maximum hex len to allow. */ ST_CHAR *astr); /* ascii string */ ST_VOID bitstring_to_ascii_str (ST_CHAR *astr, ST_UCHAR *bstr, ST_UINT numBits); ST_RET asciiToSlong (const ST_CHAR *astr, ST_LONG *sLong); ST_RET asciiToUlong (const ST_CHAR *astr, ST_ULONG *uLong); ST_RET asciiToSint (const ST_CHAR *astr, ST_INT *sInt); ST_RET asciiToUint (const ST_CHAR *astr, ST_UINT *uInt); ST_RET asciiToSint16 (const ST_CHAR *astr, ST_INT16 *sInt16); ST_RET asciiToUint16 (const ST_CHAR *astr, ST_UINT16 *uInt16); ST_RET asciiToSint8 (const ST_CHAR *astr, ST_INT8 *sInt8); ST_RET asciiToUint8 (const ST_CHAR *astr, ST_UINT8 *uInt8); ST_RET asciiToUchar (const ST_CHAR *astr, ST_UCHAR *uChar); ST_RET asciiToFloat (const ST_CHAR *astr, ST_FLOAT *floatNum); ST_RET asciiToDouble (const ST_CHAR *astr, ST_DOUBLE *doubleNum); char *strnstr (char *str1, char *str2, int len); /* SISCO code calls strcmpi, stricmp, strnicmp (Windows functions). */ /* On systems that support strcasecmp, strncasecmp, remap to use them. */ #if defined(_AIX) || defined(sun) || defined(__alpha) || defined(__hpux) || \ defined(linux) #ifndef strcmpi #define strcmpi strcasecmp #endif #ifndef stricmp #define stricmp strcasecmp #endif #ifndef strnicmp #define strnicmp strncasecmp #endif #endif /* UNIX-like systems that support strcasecmp, strncasecmp. */ /* On systems that DON'T support strcasecmp, strncasecmp, use SISCO functions. */ #if defined(VXWORKS) || defined(__LYNX) ST_INT strcmpi (ST_CHAR *,ST_CHAR *); ST_INT stricmp (ST_CHAR *,ST_CHAR *); ST_INT strnicmp (ST_CHAR *,ST_CHAR *,ST_INT n); #endif ST_VOID strncat_safe (char *dest, char *src, int max_len); ST_VOID strncpy_safe (char *dest, char *src, int max_len); ST_CHAR *sInt8ToAscii (ST_INT8 v, ST_CHAR *p); ST_CHAR *uInt8ToAscii (ST_UINT8 v, ST_CHAR *p); ST_CHAR *sInt16ToAscii (ST_INT16 v, ST_CHAR *p); ST_CHAR *uInt16ToAscii (ST_UINT16 v, ST_CHAR *p); ST_CHAR *sInt32ToAscii (ST_INT32 v, ST_CHAR *p); ST_CHAR *uInt32ToAscii (ST_UINT32 v, ST_CHAR *p); ST_CHAR *sIntToAscii (ST_INT v, ST_CHAR *p); ST_CHAR *uIntToAscii (ST_UINT v, ST_CHAR *p); ST_CHAR *sLongToAscii (ST_LONG v, ST_CHAR *p); ST_CHAR *uLongToAscii (ST_ULONG v, ST_CHAR *p); /* misc functions */ ST_BOOLEAN getKeywordFromFile (ST_CHAR *fileStr, ST_CHAR *keywordStr, ST_CHAR *valBuf, ST_UINT valBufLen); ST_CHAR *get_next_string (ST_CHAR **ptrptr, ST_CHAR *delimiters); #ifdef __cplusplus } #endif #endif /* !STR_UTIL_INCLUDED */