📄 lib_str.c
字号:
/*
*********************************************************************************************************
* uC/LIB
* CUSTOM LIBRARY MODULES
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/LIB is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/LIB in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/LIB. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* ASCII STRING MANAGEMENT
*
* Filename : lib_str.c
* Version : V1.26
* Programmer(s) : ITJ
* JDH
*********************************************************************************************************
* Note(s) : (1) NO compiler-supplied standard library functions are used in library or product software.
*
* (a) ALL standard library functions are implemented in the custom library modules :
*
* (1) \<Custom Library Directory>\lib*.*
*
* (2) \<Custom Library Directory>\Ports\<cpu>\<compiler>\lib*_a.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (b) Product-specific library functions are implemented in individual products.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#define LIB_STR_MODULE
#include <lib_str.h>
/*$PAGE*/
/*
*********************************************************************************************************
* LOCAL DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL CONSTANTS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL TABLES
*********************************************************************************************************
*/
static const CPU_INT32U Str_FmtNbr_Int32U_MultOvfThTbl[] = {
(CPU_INT32U) DEF_INT_32U_MAX_VAL, /* Invalid base 0. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 1)), /* Invalid base 1. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 2)), /* 32-bit mult ovf th for base 2. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 3)), /* 32-bit mult ovf th for base 3. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 4)), /* 32-bit mult ovf th for base 4. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 5)), /* 32-bit mult ovf th for base 5. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 6)), /* 32-bit mult ovf th for base 6. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 7)), /* 32-bit mult ovf th for base 7. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 8)), /* 32-bit mult ovf th for base 8. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 9)), /* 32-bit mult ovf th for base 9. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 10)), /* 32-bit mult ovf th for base 10. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 11)), /* 32-bit mult ovf th for base 11. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 12)), /* 32-bit mult ovf th for base 12. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 13)), /* 32-bit mult ovf th for base 13. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 14)), /* 32-bit mult ovf th for base 14. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 15)), /* 32-bit mult ovf th for base 15. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 16)), /* 32-bit mult ovf th for base 16. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 17)), /* 32-bit mult ovf th for base 17. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 18)), /* 32-bit mult ovf th for base 18. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 19)), /* 32-bit mult ovf th for base 19. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 20)), /* 32-bit mult ovf th for base 20. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 21)), /* 32-bit mult ovf th for base 21. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 22)), /* 32-bit mult ovf th for base 22. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 23)), /* 32-bit mult ovf th for base 23. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 24)), /* 32-bit mult ovf th for base 24. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 25)), /* 32-bit mult ovf th for base 25. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 26)), /* 32-bit mult ovf th for base 26. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 27)), /* 32-bit mult ovf th for base 27. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 28)), /* 32-bit mult ovf th for base 28. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 29)), /* 32-bit mult ovf th for base 29. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 30)), /* 32-bit mult ovf th for base 30. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 31)), /* 32-bit mult ovf th for base 31. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 32)), /* 32-bit mult ovf th for base 32. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 33)), /* 32-bit mult ovf th for base 33. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 34)), /* 32-bit mult ovf th for base 34. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 35)), /* 32-bit mult ovf th for base 35. */
((CPU_INT32U)(DEF_INT_32U_MAX_VAL / 36)) /* 32-bit mult ovf th for base 36. */
};
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* Str_Len()
*
* Description : Calculate length of a string.
*
* Argument(s) : pstr Pointer to string (see Note #1).
*
* Return(s) : Length of string; number of characters in string before terminating NULL character.
*
* Caller(s) : Application.
*
* Note(s) : (1) String buffer NOT modified.
*
* (2) String length calculation terminates when :
*
* (a) String pointer points to NULL.
* (1) String buffer overlaps with NULL address.
* (2) String length calculated for string up to but NOT beyond or including
* the NULL address.
*
* (b) Terminating NULL character found.
* (1) String length calculated for string up to but NOT including
* the NULL character.
*********************************************************************************************************
*/
CPU_SIZE_T Str_Len (CPU_CHAR *pstr)
{
CPU_SIZE_T len;
len = 0;
while (( pstr != (CPU_CHAR *)0) && /* Calc str len until NULL ptr (see Note #2a) ... */
(*pstr != (CPU_CHAR )0)) { /* ... or NULL char found (see Note #2b). */
len++;
pstr++;
}
return (len);
}
/*$PAGE*/
/*
*********************************************************************************************************
* Str_Copy()
*
* Description : Copy source string to destination string buffer.
*
* Argument(s) : pdest Pointer to destination string buffer to receive source string copy (see Note #1).
*
* psrc Pointer to source string to copy into destination string buffer.
*
* Return(s) : Pointer to destination string, if NO errors (see Note #2).
*
* Pointer to NULL, otherwise.
*
* Caller(s) : Application.
*
* Note(s) : (1) Destination buffer size NOT validated; buffer overruns MUST be prevented by caller.
*
* (a) Destination buffer size MUST be large enough to accommodate the entire source
* string size including the terminating NULL character.
*
* (2) String copy terminates when :
*
* (a) Destination/Source string pointer(s) are passed NULL pointers.
* (1) No string copy performed; NULL pointer returned.
*
* (b) Destination/Source string pointer(s) points to NULL.
* (1) String buffer(s) overlap with NULL address.
* (2) Source string copied into destination string buffer up to but NOT beyond or
* including the NULL address; destination string buffer properly terminated
* with NULL character.
*
* (c) Source string's terminating NULL character found.
* (1) Entire source string copied into destination string buffer.
*********************************************************************************************************
*/
CPU_CHAR *Str_Copy (CPU_CHAR *pdest,
CPU_CHAR *psrc)
{
CPU_CHAR *pstr;
CPU_CHAR *pstr_next;
/* Rtn NULL if str ptr(s) NULL (see Note #2a). */
if (pdest == (CPU_CHAR *)0) {
return ((CPU_CHAR *)0);
}
if (psrc == (CPU_CHAR *)0) {
return ((CPU_CHAR *)0);
}
pstr = pdest;
pstr_next = pstr;
pstr_next++;
while (( pstr_next != (CPU_CHAR *)0) && /* Copy str until NULL ptr(s) (see Note #2b) ... */
( psrc != (CPU_CHAR *)0) &&
(*psrc != (CPU_CHAR )0)) { /* ... or NULL char found (see Note #2c). */
*pstr = *psrc;
pstr++;
pstr_next++;
psrc++;
}
*pstr = (CPU_CHAR)0; /* Append NULL char (see Note #2b2). */
return (pdest);
}
/*$PAGE*/
/*
*********************************************************************************************************
* Str_Copy_N()
*
* Description : Copy source string to destination string buffer, up to a maximum number of characters.
*
* Argument(s) : pdest Pointer to destination string buffer to receive source string copy (see Note #1).
*
* psrc Pointer to source string to copy into destination string buffer.
*
* len_max Maximum number of characters to copy (see Note #2d).
*
* Return(s) : Pointer to destination string, if NO errors (see Note #2).
*
* Pointer to NULL, otherwise.
*
* Caller(s) : Application.
*
* Note(s) : (1) Destination buffer size NOT validated; buffer overruns MUST be prevented by caller.
*
* (a) Destination buffer size MUST be large enough to accommodate the entire source
* string size including the terminating NULL character.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -