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

📄 lib_str.c

📁 MCB2300_ucgui_LCD320240.rar LPC2368的uc/gui的移植
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
*********************************************************************************************************
*   											uC/LIB
*   									CUSTOM LIBRARY MODULES
*
*   					   (c) Copyright 2004-2007; 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.24
* 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
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*   									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)   : various.
*
* 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)   : various.
*
* 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)   : various.
*
* 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.
*
*   				(d) 'len_max' number of characters copied.
*   					(1) 'len_max' number of characters does NOT include the terminating NULL character.
*
*   						See also Note #1a.
*********************************************************************************************************
*/

CPU_CHAR * Str_Copy_N(CPU_CHAR *pdest, CPU_CHAR *psrc, CPU_SIZE_T   len_max)
{
	CPU_CHAR	*pstr;
	CPU_CHAR	*pstr_next;
	CPU_SIZE_T   len_copy;

	/* 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);
	}

	if (len_max == (CPU_SIZE_T) 0)
	{
		/* Rtn NULL if copy len equals zero (see Note #2d). 	*/
		return  ((CPU_CHAR *) 0);
	}


	pstr = pdest;
	pstr_next = pstr;
	pstr_next++;
	len_copy = 0;

	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); ...      */
		   (len_copy < (CPU_SIZE_T) len_max))
	{
		/* ... or max nbr chars copied (see Note #2d).  		*/
		*pstr = *psrc;
		pstr++;
		pstr_next++;
		psrc++;
		len_copy++;
	}

	*pstr = (CPU_CHAR) 0;   									  /* Append NULL char (see Note #2b2).  				  */


	return (pdest);
}


/*$PAGE*/
/*
*********************************************************************************************************
*   										   Str_Cat()
*
* Description : Append concatenation string to destination string.
*
* Argument(s) : pdest   	Pointer to destination   string to append concatenation  string (see Note #1).
*
*   			pstr_cat	Pointer to concatenation string to append to destination string.
*
* Return(s)   : Pointer to destination string, if NO errors (see Note #2).
*
*   			Pointer to NULL,			   otherwise.
*
* Caller(s)   : various.
*
* Note(s)     : (1) Destination string buffer size NOT validated; buffer overruns MUST be prevented by caller.
*
*   				(a) Destination buffer size MUST be large enough to accommodate the entire concatenated
*   					string size including the terminating NULL character.
*
*   			(2) String concatenation terminates when :
*
*   				(a) Destination/Concatenation string pointer(s) are passed NULL pointers.
*   					(1) No string concatenation performed; NULL pointer returned.
*
*   				(b) Destination string overlaps with NULL address.
*   					(1) No string concatenation performed; NULL pointer returned.
*
*   				(c) Destination/Concatenation string pointer(s) points to NULL.
*   					(1) String buffer(s) overlap with NULL address.
*   					(2) Concatenation string appended into destination string buffer up to but NOT
*   						beyond or including the NULL address; destination string buffer properly
*   						terminated with NULL character.
*
*   				(d) Concatenation string's terminating NULL character found.
*   					(1) Entire concatenation string appended to destination string.
*********************************************************************************************************
*/

CPU_CHAR * Str_Cat(CPU_CHAR *pdest, CPU_CHAR *pstr_cat)
{
	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 (pstr_cat == (CPU_CHAR *) 0)
	{
		return  ((CPU_CHAR *) 0);
	}


	pstr = pdest;
	while ((pstr != (CPU_CHAR *) 0) &&  						 /* Adv to end of cur dest str until NULL ptr ...   	 */
		   (*pstr != (CPU_CHAR) 0))
	{
		/* ... or NULL char found.. 							*/
		pstr++;
	}
	if (pstr == (CPU_CHAR *) 0)
	{
		/* If NULL str overrun, rtn NULL (see Note #2b).		*/
		return ((CPU_CHAR *) 0);
	}

	pstr_next = pstr;
	pstr_next++;
	while ((pstr_next != (CPU_CHAR *) 0) && 					 /* Cat str until NULL ptr(s) (see Note #2c) ...		 */
		   (pstr_cat != (CPU_CHAR *) 0) && (*pstr_cat != (CPU_CHAR) 0))
	{
		/* ... or NULL char found    (see Note #2d).			*/
		*pstr = *pstr_cat;
		pstr++;
		pstr_next++;
		pstr_cat++;
	}

	*pstr = (CPU_CHAR) 0;   									  /* Append NULL char (see Note #2c2).  				  */


	return (pdest);
}


/*$PAGE*/
/*
*********************************************************************************************************
*   										  Str_Cat_N()
*
* Description : Append concatenation string to destination string, up to a maximum number of characters.
*
* Argument(s) : pdest   	Pointer to destination   string to append concatenation  string (see Note #1).
*
*   			pstr_cat	Pointer to concatenation string to append to destination string.
*
*   			len_max 	Maximum number of characters to concatenate (see Note #2e).
*
* Return(s)   : Pointer to destination string, if NO errors (see Note #2).
*
*   			Pointer to NULL,			   otherwise.
*
* Caller(s)   : various.
*
* Note(s)     : (1) Destination string buffer size NOT validated; buffer overruns MUST be prevented by caller.
*
*   				(a) Destination buffer size MUST be large enough to accommodate the entire concatenated
*   					string size including the terminating NULL character.
*
*   			(2) String concatenation terminates when :
*
*   				(a) Destination/Concatenation string pointer(s) are passed NULL pointers.
*   					(1) No string concatenation performed; NULL pointer returned.
*
*   				(b) Destination string overlaps with NULL address.
*   					(1) No string concatenation performed; NULL pointer returned.
*
*   				(c) Destination/Concatenation string pointer(s) points to NULL.
*   					(1) String buffer(s) overlap with NULL address.
*   					(2) Concatenation string appended into destination string buffer up to but NOT

⌨️ 快捷键说明

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