UCOS_TI_LM3S_Keil
 全部 结构体 文件 函数 变量 类型定义 宏定义 
lib_str.c 文件参考
#include <lib_str.h>
lib_str.c 的引用(Include)关系图:

浏览源代码.

宏定义

#define LIB_STR_MODULE
 

函数

static CPU_CHARStr_FmtNbr_Int32 (CPU_INT32U nbr, CPU_INT08U nbr_dig, CPU_INT08U nbr_base, CPU_BOOLEAN nbr_neg, CPU_CHAR lead_char, CPU_BOOLEAN lower_case, CPU_BOOLEAN nul, CPU_CHAR *pstr)
 
static CPU_INT32U Str_ParseNbr_Int32 (CPU_CHAR *pstr, CPU_CHAR **pstr_next, CPU_INT08U nbr_base, CPU_BOOLEAN nbr_signed, CPU_BOOLEAN *pnbr_neg)
 
CPU_SIZE_T Str_Len (CPU_CHAR *pstr)
 
CPU_SIZE_T Str_Len_N (CPU_CHAR *pstr, CPU_SIZE_T len_max)
 
CPU_CHARStr_Copy (CPU_CHAR *pdest, CPU_CHAR *psrc)
 
CPU_CHARStr_Copy_N (CPU_CHAR *pdest, CPU_CHAR *psrc, CPU_SIZE_T len_max)
 
CPU_CHARStr_Cat (CPU_CHAR *pdest, CPU_CHAR *pstr_cat)
 
CPU_CHARStr_Cat_N (CPU_CHAR *pdest, CPU_CHAR *pstr_cat, CPU_SIZE_T len_max)
 
CPU_INT16S Str_Cmp (CPU_CHAR *p1_str, CPU_CHAR *p2_str)
 
CPU_INT16S Str_Cmp_N (CPU_CHAR *p1_str, CPU_CHAR *p2_str, CPU_SIZE_T len_max)
 
CPU_INT16S Str_CmpIgnoreCase (CPU_CHAR *p1_str, CPU_CHAR *p2_str)
 
CPU_INT16S Str_CmpIgnoreCase_N (CPU_CHAR *p1_str, CPU_CHAR *p2_str, CPU_SIZE_T len_max)
 
CPU_CHARStr_Char (CPU_CHAR *pstr, CPU_CHAR srch_char)
 
CPU_CHARStr_Char_N (CPU_CHAR *pstr, CPU_SIZE_T len_max, CPU_CHAR srch_char)
 
CPU_CHARStr_Char_Last (CPU_CHAR *pstr, CPU_CHAR srch_char)
 
CPU_CHARStr_Str (CPU_CHAR *pstr, CPU_CHAR *psrch_str)
 
CPU_CHARStr_FmtNbr_Int32U (CPU_INT32U nbr, CPU_INT08U nbr_dig, CPU_INT08U nbr_base, CPU_CHAR lead_char, CPU_BOOLEAN lower_case, CPU_BOOLEAN nul, CPU_CHAR *pstr)
 
CPU_CHARStr_FmtNbr_Int32S (CPU_INT32S nbr, CPU_INT08U nbr_dig, CPU_INT08U nbr_base, CPU_CHAR lead_char, CPU_BOOLEAN lower_case, CPU_BOOLEAN nul, CPU_CHAR *pstr)
 
CPU_INT32U Str_ParseNbr_Int32U (CPU_CHAR *pstr, CPU_CHAR **pstr_next, CPU_INT08U nbr_base)
 
CPU_INT32S Str_ParseNbr_Int32S (CPU_CHAR *pstr, CPU_CHAR **pstr_next, CPU_INT08U nbr_base)
 

变量

static const CPU_INT32U Str_MultOvfThTbl_Int32U []
 

宏定义说明

#define LIB_STR_MODULE

在文件 lib_str.c70 行定义.

函数说明

static CPU_CHAR * Str_FmtNbr_Int32 ( CPU_INT32U  nbr,
CPU_INT08U  nbr_dig,
CPU_INT08U  nbr_base,
CPU_BOOLEAN  nbr_neg,
CPU_CHAR  lead_char,
CPU_BOOLEAN  lower_case,
CPU_BOOLEAN  nul,
CPU_CHAR pstr 
)
static

在文件 lib_str.c2406 行定义.

参考 ASCII_IsPrint(), DEF_NO, DEF_YES , 以及 Str_MultOvfThTbl_Int32U.

参考自 Str_FmtNbr_Int32S() , 以及 Str_FmtNbr_Int32U().

2414 {
2415  CPU_CHAR *pstr_fmt;
2416  CPU_INT32U nbr_fmt;
2417  CPU_INT32U nbr_exp;
2418  CPU_INT32U nbr_dig_val;
2419  CPU_INT08U log_floor;
2420  CPU_INT08U i;
2421  CPU_BOOLEAN ovf;
2422  CPU_BOOLEAN print_char;
2423 
2424 
2425 /*$PAGE*/
2426  if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if str ptr NULL (see Note #6a). */
2427  return ((CPU_CHAR *)0);
2428  }
2429  /* Rtn NULL if invalid base (see Note #6b). */
2430  if ((nbr_base < 2) ||
2431  (nbr_base > 36)) {
2432  return ((CPU_CHAR *)0);
2433  }
2434 
2435  if (lead_char == (CPU_CHAR)'\0') { /* If lead char NOT avail, ... */
2436  log_floor = 1; /* ... calc floor of nbr digs (see Note #1a) ... */
2437  nbr_exp = nbr_base;
2438  ovf = DEF_NO;
2439  while ((nbr_exp <= nbr) &&
2440  (ovf == DEF_NO)) {
2441  if (nbr_exp <= Str_MultOvfThTbl_Int32U[nbr_base]) {
2442  nbr_exp *= nbr_base;
2443  } else {
2444  ovf = DEF_YES;
2445  }
2446  log_floor++;
2447  }
2448  if (nbr_dig > log_floor) {
2449  nbr_dig = log_floor; /* ... & lim max nbr digs. */
2450  }
2451 
2452  } else {
2453  print_char = ASCII_IsPrint(lead_char);
2454  if (print_char != DEF_YES) { /* Rtn NULL if lead char non-printable (see Note #6c). */
2455  return ((CPU_CHAR *)0);
2456  }
2457  }
2458 
2459 
2460  nbr_fmt = nbr;
2461  pstr_fmt = pstr;
2462 
2463  if (nbr_neg == DEF_YES) { /* If nbr neg ... */
2464  if (nbr_dig > 0) { /* ... & if at least one dig, ... */
2465  *pstr_fmt++ = '-'; /* ... prepend a neg sign. */
2466  }
2467  }
2468 
2469  pstr_fmt += nbr_dig; /* Start fmt from least significant dig. */
2470 
2471  if (nul != DEF_NO) { /* If NOT DISABLED, append NULL char (see Note #4). */
2472  *pstr_fmt = (CPU_CHAR)'\0';
2473  }
2474  pstr_fmt--;
2475 
2476  if (nbr_dig > 0) {
2477  for (i = 1; i <= nbr_dig; i++) { /* Fmt str for desired nbr digs. */
2478  if ((nbr_fmt > 0) || /* If fmt nbr > 0 (see Note #3c1), ... */
2479  (nbr_dig == 1) || /* ... OR exactly 1 dig to fmt (see Note #3c2), ... */
2480  (i == 1)) { /* ... OR on one's dig to fmt; ... */
2481  /* ... calc & fmt dig val; ... */
2482  nbr_dig_val = nbr_fmt % nbr_base;
2483  if (nbr_dig_val <= 9) {
2484  *pstr_fmt-- = (CPU_CHAR)(nbr_dig_val + '0');
2485  } else {
2486  if (lower_case != DEF_YES) {
2487  *pstr_fmt-- = (CPU_CHAR)((nbr_dig_val - 10) + 'A');
2488  } else {
2489  *pstr_fmt-- = (CPU_CHAR)((nbr_dig_val - 10) + 'a');
2490  }
2491  }
2492 
2493  } else if (lead_char != (CPU_CHAR)'\0') { /* ... else if avail, ... */
2494  *pstr_fmt-- = (CPU_CHAR)lead_char; /* ... fmt lead char. */
2495  }
2496 
2497  nbr_fmt /= nbr_base; /* Shift nbr to next more significant dig. */
2498  }
2499  }
2500 
2501 
2502  return (pstr); /* Rtn ptr to fmt'd str (see Note #6d). */
2503 }

函数调用图:

这是这个函数的调用关系图:

static CPU_INT32U Str_ParseNbr_Int32 ( CPU_CHAR pstr,
CPU_CHAR **  pstr_next,
CPU_INT08U  nbr_base,
CPU_BOOLEAN  nbr_signed,
CPU_BOOLEAN pnbr_neg 
)
static

在文件 lib_str.c2731 行定义.

参考 ASCII_IsAlphaNum(), ASCII_IsDig(), ASCII_IsDigHex(), ASCII_IsLower(), ASCII_IsSpace(), DEF_INT_32U_MAX_VAL, DEF_NO, DEF_YES , 以及 Str_MultOvfThTbl_Int32U.

参考自 Str_ParseNbr_Int32S() , 以及 Str_ParseNbr_Int32U().

2736 {
2737  CPU_CHAR *pstr_parse;
2738  CPU_CHAR *pstr_parse_nbr;
2739  CPU_CHAR parse_char;
2740  CPU_INT08U parse_dig;
2741  CPU_INT32U nbr;
2742  CPU_BOOLEAN nbr_dig;
2743  CPU_BOOLEAN nbr_alpha;
2744  CPU_BOOLEAN nbr_hex;
2745  CPU_BOOLEAN nbr_hex_lower;
2746  CPU_BOOLEAN whitespace;
2747  CPU_BOOLEAN neg;
2748  CPU_BOOLEAN ovf;
2749  CPU_BOOLEAN done;
2750 
2751  /* Init rtn vals for err (see Note #5). */
2752  if (pstr_next != (CPU_CHAR **)0) {
2753  *pstr_next = (CPU_CHAR *)pstr;
2754  }
2755 
2756  if (pnbr_neg != (CPU_BOOLEAN *)0) {
2757  *pnbr_neg = (CPU_BOOLEAN )DEF_NO;
2758  }
2759 
2760 
2761  if (pstr == (CPU_CHAR *)0) { /* Rtn zero if str ptr NULL (see Note #4b1). */
2762  return ((CPU_INT32U)0);
2763  }
2764  /* Rtn zero if invalid base (see Note #4a). */
2765  if ((nbr_base == 1) ||
2766  (nbr_base > 36)) {
2767  return ((CPU_INT32U)0);
2768  }
2769 
2770 
2771  /* ------------- IGNORE PRECEDING CHAR(S) ------------- */
2772  pstr_parse = pstr; /* Save ptr to init'l str for err (see Note #2a2A2). */
2773 
2774  whitespace = ASCII_IsSpace(*pstr_parse);
2775  while (whitespace == DEF_YES) { /* Ignore initial white-space char(s) [see Note #2a1A]. */
2776  pstr_parse++;
2777  whitespace = ASCII_IsSpace(*pstr_parse);
2778  }
2779 
2780  switch (*pstr_parse) {
2781  case '+': /* Ignore pos sign (see Note #2a1B2). */
2782  pstr_parse++;
2783  neg = DEF_NO;
2784  break;
2785 
2786 
2787  case '-': /* Validate neg sign (see Note #2a1B2a). */
2788  if (nbr_signed == DEF_YES) {
2789  pstr_parse++;
2790  }
2791  neg = DEF_YES;
2792  break;
2793 
2794 
2795  default:
2796  neg = DEF_NO;
2797  break;
2798  }
2799 
2800 
2801 /*$PAGE*/
2802  /* --------- IGNORE NBR BASE PRECEDING CHAR(S) -------- */
2803  pstr_parse_nbr = pstr_parse; /* Save ptr to str's nbr (see Note #2a1A1). */
2804 
2805  switch (nbr_base) {
2806  case 0: /* Determine unspecified nbr base (see Notes #2a1B1a). */
2807  if (*pstr_parse == '0') { /* If avail, ... */
2808  pstr_parse++; /* ... adv past '0' prefix (see Note #2a1B1b2). */
2809  switch (*pstr_parse) {
2810  case 'x': /* For '0x' prefix, ... */
2811  case 'X':
2812  nbr_base = 16; /* ... set nbr base = 16 (see Note #2a1B1a3). */
2813  parse_char = (CPU_CHAR)(*(pstr_parse + 1));
2814  nbr_hex = ASCII_IsDigHex(parse_char);
2815  if (nbr_hex == DEF_YES) { /* If next char is valid hex dig, ... */
2816  pstr_parse++; /* ... adv past '0x' prefix (see Note #2a1B1b2A). */
2817  }
2818  break;
2819 
2820 
2821  default: /* For '0' prefix, ... */
2822  nbr_base = 8; /* ... set nbr base = 8 (see Note #2a1B1a2). */
2823  break;
2824  }
2825 
2826  } else { /* For non-'0' prefix, ... */
2827  nbr_base = 10; /* ... set nbr base = 10 (see Note #2a1B1a1). */
2828  }
2829  break;
2830 
2831 
2832  case 8: /* See Note #2a1B1a2. */
2833  if (*pstr_parse == '0') { /* If avail, ... */
2834  pstr_parse++; /* ... adv past '0' prefix (see Note #2a1B1b2B). */
2835  }
2836  break;
2837 
2838 
2839  case 16: /* See Note #2a1B1a3. */
2840  if (*pstr_parse == '0') { /* If avail, ... */
2841  pstr_parse++; /* ... adv past '0' prefix (see Note #2a1B1b2). */
2842  switch (*pstr_parse) {
2843  case 'x':
2844  case 'X':
2845  parse_char = (CPU_CHAR)(*(pstr_parse + 1));
2846  nbr_hex = ASCII_IsDigHex(parse_char);
2847  if (nbr_hex == DEF_YES) { /* If next char is valid hex dig, ... */
2848  pstr_parse++; /* ... adv past '0x' prefix (see Note #2a1B1b2A). */
2849  }
2850  break;
2851 
2852 
2853  default:
2854  break;
2855  }
2856  }
2857  break;
2858 
2859 
2860  default: /* See Note #2a1B1b. */
2861  break;
2862  }
2863 
2864 
2865 /*$PAGE*/
2866  /* ------------------ PARSE INT STR ------------------- */
2867  nbr = 0;
2868  ovf = DEF_NO;
2869  done = DEF_NO;
2870 
2871  while (done == DEF_NO) { /* Parse str for desired nbr base digs (see Note #2a2). */
2872  parse_char = (CPU_CHAR)*pstr_parse;
2873  nbr_alpha = ASCII_IsAlphaNum(parse_char);
2874  if (nbr_alpha == DEF_YES) { /* If valid alpha num nbr dig avail, ... */
2875  /* ... convert parse char into nbr dig. */
2876  nbr_dig = ASCII_IsDig(parse_char);
2877  if (nbr_dig == DEF_YES) {
2878  parse_dig = (CPU_INT08U)(parse_char - '0');
2879  } else {
2880  nbr_hex_lower = ASCII_IsLower(parse_char);
2881  if (nbr_hex_lower == DEF_YES) {
2882  parse_dig = (CPU_INT08U)((parse_char - 'a') + 10);
2883  } else {
2884  parse_dig = (CPU_INT08U)((parse_char - 'A') + 10);
2885  }
2886  }
2887 
2888  if (parse_dig < nbr_base) { /* If parse char valid for nbr base ... */
2889  if (ovf == DEF_NO) { /* ... & nbr NOT yet ovf'd, ... */
2890  if (nbr <= Str_MultOvfThTbl_Int32U[nbr_base]) {
2891  /* ... merge parse char dig into nbr. */
2892  nbr *= nbr_base;
2893  nbr += parse_dig;
2894  if (nbr < parse_dig) {
2895  ovf = DEF_YES;
2896  }
2897  } else {
2898  ovf = DEF_YES;
2899  }
2900  }
2901  pstr_parse++;
2902 
2903  } else { /* Invalid char parsed (see Note #2a1C1a). */
2904  done = DEF_YES;
2905  }
2906 
2907  } else { /* Invalid OR NULL char parsed (see Note #2a1C1). */
2908  done = DEF_YES;
2909  }
2910  }
2911 
2912  if (ovf == DEF_YES) { /* If nbr ovf'd, ... */
2913  nbr = DEF_INT_32U_MAX_VAL; /* ... rtn max int val (see Note #2a3A1). */
2914  }
2915 
2916 
2917  if (pstr_next != (CPU_CHAR **)0) {
2918  if (pstr_parse != pstr_parse_nbr) { /* If final parse str != init'l parse nbr str, .. */
2919  *pstr_next = pstr_parse; /* .. rtn parse str's next char (see Note #2a2B2); .. */
2920  } else {
2921  *pstr_next = pstr; /* .. else rtn initial parse str (see Note #2a2A2). */
2922  }
2923  }
2924 
2925  if (pnbr_neg != (CPU_BOOLEAN *)0) {
2926  *pnbr_neg = (CPU_BOOLEAN )neg; /* Rtn neg nbr status. */
2927  }
2928 
2929 
2930  return (nbr);
2931 }

函数调用图:

这是这个函数的调用关系图:

CPU_SIZE_T Str_Len ( CPU_CHAR pstr)

在文件 lib_str.c208 行定义.

参考 DEF_INT_CPU_U_MAX_VAL , 以及 Str_Len_N().

参考自 BSP_Print(), BSP_SerPrint(), Str_Char_Last() , 以及 Str_Str().

209 {
210  CPU_SIZE_T len;
211 
212 
213  len = Str_Len_N((CPU_CHAR *)pstr,
215 
216  return (len);
217 }

函数调用图:

这是这个函数的调用关系图:

CPU_SIZE_T Str_Len_N ( CPU_CHAR pstr,
CPU_SIZE_T  len_max 
)

在文件 lib_str.c257 行定义.

参考自 Str_Len().

259 {
260  CPU_SIZE_T len;
261 
262 
263  len = 0;
264  while (( pstr != (CPU_CHAR *) 0 ) && /* Calc str len until NULL ptr (see Note #2a) ... */
265  (*pstr != (CPU_CHAR )'\0') && /* ... or NULL char found (see Note #2b) ... */
266  ( len < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars srch'd (see Note #2c). */
267  len++;
268  pstr++;
269  }
270 
271  return (len);
272 }

这是这个函数的调用关系图:

CPU_CHAR* Str_Copy ( CPU_CHAR pdest,
CPU_CHAR psrc 
)

在文件 lib_str.c313 行定义.

参考 DEF_INT_CPU_U_MAX_VAL , 以及 Str_Copy_N().

参考自 App_DispScr_CtxSw(), App_DispScr_Inputs(), App_DispScr_SignOn() , 以及 App_DispScr_VersionTickRateCPU().

315 {
316  pdest = Str_Copy_N((CPU_CHAR *)pdest,
317  (CPU_CHAR *)psrc,
319 
320  return (pdest);
321 }

函数调用图:

这是这个函数的调用关系图:

CPU_CHAR* Str_Copy_N ( CPU_CHAR pdest,
CPU_CHAR psrc,
CPU_SIZE_T  len_max 
)

在文件 lib_str.c369 行定义.

参考自 Str_Copy().

372 {
373  CPU_CHAR *pstr;
374  CPU_CHAR *pstr_next;
375  CPU_SIZE_T len_copy;
376 
377  /* Rtn NULL if str ptr(s) NULL (see Note #2a). */
378  if (pdest == (CPU_CHAR *)0) {
379  return ((CPU_CHAR *)0);
380  }
381  if (psrc == (CPU_CHAR *)0) {
382  return ((CPU_CHAR *)0);
383  }
384 
385  if (len_max == (CPU_SIZE_T)0) { /* Rtn NULL if copy len equals zero (see Note #2d). */
386  return ((CPU_CHAR *)0);
387  }
388 
389 
390  pstr = pdest;
391  pstr_next = pstr;
392  pstr_next++;
393  len_copy = 0;
394 
395  while (( pstr_next != (CPU_CHAR *) 0 ) && /* Copy str until NULL ptr(s) [see Note #2b] ... */
396  ( psrc != (CPU_CHAR *) 0 ) &&
397  (*psrc != (CPU_CHAR )'\0') && /* ... or NULL char found (see Note #2c); ... */
398  ( len_copy < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars copied (see Note #2d). */
399  *pstr = *psrc;
400  pstr++;
401  pstr_next++;
402  psrc++;
403  len_copy++;
404  }
405 
406  *pstr = (CPU_CHAR)'\0'; /* Append NULL char (see Note #2b2). */
407 
408 
409  return (pdest);
410 }

这是这个函数的调用关系图:

CPU_CHAR* Str_Cat ( CPU_CHAR pdest,
CPU_CHAR pstr_cat 
)

在文件 lib_str.c454 行定义.

参考 DEF_INT_CPU_U_MAX_VAL , 以及 Str_Cat_N().

456 {
457  pdest = Str_Cat_N((CPU_CHAR *)pdest,
458  (CPU_CHAR *)pstr_cat,
460 
461  return (pdest);
462 }

函数调用图:

CPU_CHAR* Str_Cat_N ( CPU_CHAR pdest,
CPU_CHAR pstr_cat,
CPU_SIZE_T  len_max 
)

在文件 lib_str.c513 行定义.

参考自 Str_Cat().

516 {
517  CPU_CHAR *pstr;
518  CPU_CHAR *pstr_next;
519  CPU_SIZE_T len_cat;
520 
521  /* Rtn NULL if str ptr(s) NULL (see Note #2a). */
522  if (pdest == (CPU_CHAR *)0) {
523  return ((CPU_CHAR *)0);
524  }
525  if (pstr_cat == (CPU_CHAR *)0) {
526  return ((CPU_CHAR *)0);
527  }
528 
529  if (len_max == (CPU_SIZE_T)0) { /* Rtn NULL if cat len equals zero (see Note #2e). */
530  return ((CPU_CHAR *)0);
531  }
532 
533 
534  pstr = pdest;
535  while (( pstr != (CPU_CHAR *) 0 ) && /* Adv to end of cur dest str until NULL ptr ... */
536  (*pstr != (CPU_CHAR )'\0')) { /* ... or NULL char found.. */
537  pstr++;
538  }
539  if (pstr == (CPU_CHAR *)0) { /* If NULL str overrun, rtn NULL (see Note #2b). */
540  return ((CPU_CHAR *)0);
541  }
542 
543  pstr_next = pstr;
544  pstr_next++;
545  len_cat = 0;
546 
547  while (( pstr_next != (CPU_CHAR *) 0 ) && /* Cat str until NULL ptr(s) [see Note #2c] ... */
548  ( pstr_cat != (CPU_CHAR *) 0 ) &&
549  (*pstr_cat != (CPU_CHAR )'\0') && /* ... or NULL char found (see Note #2d); ... */
550  ( len_cat < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars cat'd (see Note #2d). */
551  *pstr = *pstr_cat;
552  pstr++;
553  pstr_next++;
554  pstr_cat++;
555  len_cat++;
556  }
557 
558  *pstr = (CPU_CHAR)'\0'; /* Append NULL char (see Note #2c2). */
559 
560 
561  return (pdest);
562 }

这是这个函数的调用关系图:

CPU_INT16S Str_Cmp ( CPU_CHAR p1_str,
CPU_CHAR p2_str 
)

在文件 lib_str.c641 行定义.

参考 DEF_INT_CPU_U_MAX_VAL , 以及 Str_Cmp_N().

643 {
644  CPU_INT16S cmp_val;
645 
646 
647  cmp_val = Str_Cmp_N((CPU_CHAR *)p1_str,
648  (CPU_CHAR *)p2_str,
650 
651  return (cmp_val);
652 }

函数调用图:

CPU_INT16S Str_Cmp_N ( CPU_CHAR p1_str,
CPU_CHAR p2_str,
CPU_SIZE_T  len_max 
)

在文件 lib_str.c743 行定义.

参考自 Str_Cmp() , 以及 Str_Str().

746 {
747  CPU_CHAR *p1_str_next;
748  CPU_CHAR *p2_str_next;
749  CPU_INT16S cmp_val;
750  CPU_SIZE_T cmp_len;
751 
752 
753  if (len_max == 0) { /* If cmp len equals zero, rtn 0 (see Note #3d1). */
754  return ((CPU_INT16S)0);
755  }
756 
757  if (p1_str == (CPU_CHAR *)0) {
758  if (p2_str == (CPU_CHAR *)0) {
759  return ((CPU_INT16S)0); /* If BOTH str ptrs NULL, rtn 0 (see Note #3a1A). */
760  }
761  cmp_val = (CPU_INT16S)0 - (CPU_INT16S)(*p2_str);
762  return (cmp_val); /* If p1_str NULL, rtn neg p2_str val (see Note #3a1B1).*/
763  }
764  if (p2_str == (CPU_CHAR *)0) {
765  cmp_val = (CPU_INT16S)(*p1_str);
766  return (cmp_val); /* If p2_str NULL, rtn pos p1_str val (see Note #3a1B2).*/
767  }
768 
769 
770  p1_str_next = p1_str;
771  p2_str_next = p2_str;
772  p1_str_next++;
773  p2_str_next++;
774  cmp_len = 0;
775  while ((*p1_str == *p2_str) && /* Cmp strs until non-matching chars (see Note #3c) ... */
776  (*p1_str != (CPU_CHAR )'\0') && /* ... or NULL chars (see Note #3b) ... */
777  ( p1_str_next != (CPU_CHAR *) 0 ) && /* ... or NULL ptr(s) found (see Note #3a2); */
778  ( p2_str_next != (CPU_CHAR *) 0 ) &&
779  ( cmp_len < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars cmp'd (see Note #3d2). */
780  p1_str_next++;
781  p2_str_next++;
782  p1_str++;
783  p2_str++;
784  cmp_len++;
785  }
786 
787 
788  if (cmp_len == len_max) { /* If strs identical for len nbr of chars, ... */
789  return ((CPU_INT16S)0); /* ... rtn 0 (see Note #3d2). */
790  }
791 
792  if (*p1_str != *p2_str) { /* If strs NOT identical, ... */
793  cmp_val = (CPU_INT16S)(*p1_str) - (CPU_INT16S)(*p2_str); /* ... calc & rtn char diff (see Note #3c). */
794 
795  } else if (*p1_str == (CPU_CHAR)'\0') { /* If NULL char(s) found, ... */
796  cmp_val = 0; /* ... strs identical; rtn 0 (see Note #3b). */
797 
798  } else {
799  if (p1_str_next == (CPU_CHAR *)0) {
800  if (p2_str_next == (CPU_CHAR *)0) { /* If BOTH next str ptrs NULL, ... */
801  cmp_val = (CPU_INT16S)0; /* ... rtn 0 (see Note #3a2A). */
802  } else { /* If p1_str_next NULL, ... */
803  /* ... rtn neg p2_str_next val (see Note #3a2B1). */
804  cmp_val = (CPU_INT16S)0 - (CPU_INT16S)(*p2_str_next);
805  }
806  } else { /* If p2_str_next NULL, ... */
807  cmp_val = (CPU_INT16S)(*p1_str_next); /* ... rtn pos p1_str_next val (see Note #3a2B2). */
808  }
809  }
810 
811 
812  return (cmp_val);
813 }

这是这个函数的调用关系图:

CPU_INT16S Str_CmpIgnoreCase ( CPU_CHAR p1_str,
CPU_CHAR p2_str 
)

在文件 lib_str.c902 行定义.

参考 DEF_INT_CPU_U_MAX_VAL , 以及 Str_CmpIgnoreCase_N().

904 {
905  CPU_INT16S cmp_val;
906 
907 
908  cmp_val = Str_CmpIgnoreCase_N((CPU_CHAR *)p1_str,
909  (CPU_CHAR *)p2_str,
911 
912  return (cmp_val);
913 }

函数调用图:

CPU_INT16S Str_CmpIgnoreCase_N ( CPU_CHAR p1_str,
CPU_CHAR p2_str,
CPU_SIZE_T  len_max 
)

在文件 lib_str.c1014 行定义.

参考 ASCII_TO_LOWER.

参考自 Str_CmpIgnoreCase().

1017 {
1018  CPU_CHAR *p1_str_next;
1019  CPU_CHAR *p2_str_next;
1020  CPU_CHAR char1;
1021  CPU_CHAR char2;
1022  CPU_INT16S cmp_val;
1023  CPU_SIZE_T cmp_len;
1024 
1025 
1026  if (len_max == 0) { /* If cmp len equals zero, rtn 0 (see Note #3d1). */
1027  return ((CPU_INT16S)0);
1028  }
1029 
1030  if (p1_str == (CPU_CHAR *)0) {
1031  if (p2_str == (CPU_CHAR *)0) {
1032  return ((CPU_INT16S)0); /* If BOTH str ptrs NULL, rtn 0 (see Note #3a1A). */
1033  }
1034  char2 = ASCII_TO_LOWER(*p2_str);
1035  cmp_val = (CPU_INT16S)0 - (CPU_INT16S)char2;
1036  return (cmp_val); /* If p1_str NULL, rtn neg p2_str val (see Note #3a1B1).*/
1037  }
1038  if (p2_str == (CPU_CHAR *)0) {
1039  char1 = ASCII_TO_LOWER(*p1_str);
1040  cmp_val = (CPU_INT16S)char1;
1041  return (cmp_val); /* If p2_str NULL, rtn pos p1_str val (see Note #3a1B2).*/
1042  }
1043 
1044 
1045  p1_str_next = p1_str;
1046  p2_str_next = p2_str;
1047  p1_str_next++;
1048  p2_str_next++;
1049  char1 = ASCII_TO_LOWER(*p1_str);
1050  char2 = ASCII_TO_LOWER(*p2_str);
1051  cmp_len = 0;
1052  while (( char1 == char2) && /* Cmp strs until non-matching chars (see Note #3c) ... */
1053  (*p1_str != (CPU_CHAR )'\0') && /* ... or NULL chars (see Note #3b) ... */
1054  ( p1_str_next != (CPU_CHAR *) 0 ) && /* ... or NULL ptr(s) found (see Note #3a2); */
1055  ( p2_str_next != (CPU_CHAR *) 0 ) &&
1056  ( cmp_len < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars cmp'd (see Note #3d2). */
1057  p1_str_next++;
1058  p2_str_next++;
1059  p1_str++;
1060  p2_str++;
1061  cmp_len++;
1062  char1 = ASCII_TO_LOWER(*p1_str);
1063  char2 = ASCII_TO_LOWER(*p2_str);
1064  }
1065 
1066 
1067  if (cmp_len == len_max) { /* If strs identical for len nbr of chars, ... */
1068  return ((CPU_INT16S)0); /* ... rtn 0 (see Note #3d2). */
1069  }
1070 
1071  if (char1 != char2) { /* If strs NOT identical, ... */
1072  cmp_val = (CPU_INT16S)char1 - (CPU_INT16S)char2; /* ... calc & rtn char diff (see Note #3c). */
1073 
1074  } else if (char1 == (CPU_CHAR)'\0') { /* If NULL char(s) found, ... */
1075  cmp_val = 0; /* ... strs identical; rtn 0 (see Note #3b). */
1076 
1077  } else {
1078  if (p1_str_next == (CPU_CHAR *)0) {
1079  if (p2_str_next == (CPU_CHAR *)0) { /* If BOTH next str ptrs NULL, ... */
1080  cmp_val = (CPU_INT16S)0; /* ... rtn 0 (see Note #3a2A). */
1081  } else { /* If p1_str_next NULL, ... */
1082  char2 = ASCII_TO_LOWER(*p2_str_next);
1083  cmp_val = (CPU_INT16S)0 - (CPU_INT16S)char2; /* ... rtn neg p2_str_next val (see Note #3a2B1). */
1084  }
1085  } else { /* If p2_str_next NULL, ... */
1086  char1 = ASCII_TO_LOWER(*p1_str_next);
1087  cmp_val = (CPU_INT16S)char1; /* ... rtn pos p1_str_next val (see Note #3a2B2). */
1088  }
1089  }
1090 
1091 
1092  return (cmp_val);
1093 }

这是这个函数的调用关系图:

CPU_CHAR* Str_Char ( CPU_CHAR pstr,
CPU_CHAR  srch_char 
)

在文件 lib_str.c1133 行定义.

参考 DEF_INT_CPU_U_MAX_VAL , 以及 Str_Char_N().

1135 {
1136  pstr = Str_Char_N((CPU_CHAR *)pstr,
1138  (CPU_CHAR )srch_char);
1139 
1140  return (pstr);
1141 }

函数调用图:

CPU_CHAR* Str_Char_N ( CPU_CHAR pstr,
CPU_SIZE_T  len_max,
CPU_CHAR  srch_char 
)

在文件 lib_str.c1191 行定义.

参考自 Str_Char().

1194 {
1195  CPU_CHAR *pstr_next;
1196  CPU_SIZE_T len_srch;
1197 
1198 
1199  if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
1200  return ((CPU_CHAR *)0);
1201  }
1202 
1203  if (len_max == (CPU_SIZE_T)0) { /* Rtn NULL if srch len equals zero (see Note #2e). */
1204  return ((CPU_CHAR *)0);
1205  }
1206 
1207 
1208  pstr_next = pstr;
1209  pstr_next++;
1210  len_srch = 0;
1211  while (( pstr_next != (CPU_CHAR *) 0 ) && /* Srch str until NULL ptr(s) [see Note #2b] ... */
1212  (*pstr != (CPU_CHAR )'\0') && /* ... or NULL char (see Note #2c) ... */
1213  (*pstr != (CPU_CHAR )srch_char) && /* ... or srch char found (see Note #2d); ... */
1214  ( len_srch < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars srch'd (see Note #2e). */
1215  pstr++;
1216  pstr_next++;
1217  len_srch++;
1218  }
1219 
1220 
1221  if (*pstr != srch_char) { /* If srch char NOT found, str points to NULL; ... */
1222  return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
1223  }
1224 
1225  return (pstr); /* Else rtn ptr to found srch char (see Note #2d). */
1226 }

这是这个函数的调用关系图:

CPU_CHAR* Str_Char_Last ( CPU_CHAR pstr,
CPU_CHAR  srch_char 
)

在文件 lib_str.c1267 行定义.

参考 Str_Len().

1269 {
1270  CPU_CHAR *pstr_next;
1271  CPU_SIZE_T str_len;
1272 
1273 
1274  if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
1275  return ((CPU_CHAR *)0);
1276  }
1277 
1278 
1279  pstr_next = pstr;
1280  str_len = Str_Len(pstr);
1281  pstr_next += str_len;
1282  while (( pstr_next != pstr) && /* Srch str from end until begining (see Note #2c) ... */
1283  (*pstr_next != srch_char)) { /* ... until srch char found (see Note #2d). */
1284  pstr_next--;
1285  }
1286 
1287 
1288  if (*pstr_next != srch_char) { /* If srch char NOT found, str points to NULL; ... */
1289  return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
1290  }
1291 
1292  return (pstr_next); /* Else rtn ptr to found srch char (see Note #2d). */
1293 }

函数调用图:

CPU_CHAR* Str_Str ( CPU_CHAR pstr,
CPU_CHAR psrch_str 
)

在文件 lib_str.c1337 行定义.

参考 DEF_NO, DEF_YES, Str_Cmp_N() , 以及 Str_Len().

1339 {
1340  CPU_SIZE_T str_len;
1341  CPU_SIZE_T srch_str_len;
1342  CPU_SIZE_T srch_len;
1343  CPU_SIZE_T srch_ix;
1344  CPU_BOOLEAN srch_done;
1345  CPU_INT16S srch_cmp;
1346  CPU_CHAR *pstr_srch_ix;
1347 
1348  /* Rtn NULL if str ptr(s) NULL (see Note #2a). */
1349  if (pstr == (CPU_CHAR *)0) {
1350  return ((CPU_CHAR *)0);
1351  }
1352  if (psrch_str == (CPU_CHAR *)0) {
1353  return ((CPU_CHAR *)0);
1354  }
1355 
1356 
1357  str_len = Str_Len(pstr);
1358  srch_str_len = Str_Len(psrch_str);
1359  if (srch_str_len > str_len) { /* If srch str len > str len, rtn NULL (see Note #2b). */
1360  return ((CPU_CHAR *)0);
1361  }
1362  if (srch_str_len == 0) { /* If srch str len = 0, srch str equal NULL str; ... */
1363  pstr_srch_ix = (CPU_CHAR *)(pstr + str_len); /* ... rtn ptr to NULL str found in str (see Note #2c). */
1364  return (pstr_srch_ix);
1365  }
1366 
1367  srch_len = str_len - srch_str_len; /* Determine srch len (see Note #2d1). */
1368  srch_ix = 0;
1369  srch_done = DEF_NO;
1370  do {
1371  pstr_srch_ix = (CPU_CHAR *)(pstr + srch_ix);
1372  srch_cmp = Str_Cmp_N(pstr_srch_ix, psrch_str, srch_str_len);
1373  srch_done = (srch_cmp == 0) ? DEF_YES : DEF_NO;
1374  srch_ix++;
1375  } while ((srch_done == DEF_NO) && (srch_ix <= srch_len));
1376 
1377 
1378  if (srch_cmp != 0) { /* If srch str NOT found, rtn NULL (see Note #2d). */
1379  return ((CPU_CHAR *)0);
1380  }
1381 
1382  return (pstr_srch_ix); /* Rtn ptr to srch str found in str (see Note #2e). */
1383 }

函数调用图:

CPU_CHAR* Str_FmtNbr_Int32U ( CPU_INT32U  nbr,
CPU_INT08U  nbr_dig,
CPU_INT08U  nbr_base,
CPU_CHAR  lead_char,
CPU_BOOLEAN  lower_case,
CPU_BOOLEAN  nul,
CPU_CHAR pstr 
)

在文件 lib_str.c1476 行定义.

参考 DEF_NO , 以及 Str_FmtNbr_Int32().

参考自 App_DispScr_CtxSw(), App_DispScr_Inputs() , 以及 App_DispScr_VersionTickRateCPU().

1483 {
1484  CPU_CHAR *pstr_fmt;
1485 
1486 
1487  pstr_fmt = Str_FmtNbr_Int32((CPU_INT32U )nbr, /* Fmt unsigned int into str. */
1488  (CPU_INT08U )nbr_dig,
1489  (CPU_INT08U )nbr_base,
1491  (CPU_CHAR )lead_char,
1492  (CPU_BOOLEAN)lower_case,
1493  (CPU_BOOLEAN)nul,
1494  (CPU_CHAR *)pstr);
1495 
1496  return (pstr_fmt);
1497 }

函数调用图:

这是这个函数的调用关系图:

CPU_CHAR* Str_FmtNbr_Int32S ( CPU_INT32S  nbr,
CPU_INT08U  nbr_dig,
CPU_INT08U  nbr_base,
CPU_CHAR  lead_char,
CPU_BOOLEAN  lower_case,
CPU_BOOLEAN  nul,
CPU_CHAR pstr 
)

在文件 lib_str.c1602 行定义.

参考 DEF_NO, DEF_YES , 以及 Str_FmtNbr_Int32().

1609 {
1610  CPU_CHAR *pstr_fmt;
1611  CPU_INT32S nbr_fmt;
1612  CPU_BOOLEAN nbr_neg;
1613 
1614 
1615  nbr_fmt = nbr;
1616  if (nbr_fmt < 0) { /* If nbr neg, ... */
1617  nbr_fmt = -nbr_fmt; /* ... negate nbr. */
1618  nbr_neg = DEF_YES;
1619  } else {
1620  nbr_neg = DEF_NO;
1621  }
1622 
1623  pstr_fmt = Str_FmtNbr_Int32((CPU_INT32U )nbr_fmt, /* Fmt signed int into str. */
1624  (CPU_INT08U )nbr_dig,
1625  (CPU_INT08U )nbr_base,
1626  (CPU_BOOLEAN)nbr_neg,
1627  (CPU_CHAR )lead_char,
1628  (CPU_BOOLEAN)lower_case,
1629  (CPU_BOOLEAN)nul,
1630  (CPU_CHAR *)pstr);
1631 
1632  return (pstr_fmt);
1633 }

函数调用图:

CPU_INT32U Str_ParseNbr_Int32U ( CPU_CHAR pstr,
CPU_CHAR **  pstr_next,
CPU_INT08U  nbr_base 
)

在文件 lib_str.c2037 行定义.

参考 DEF_NO , 以及 Str_ParseNbr_Int32().

2040 {
2041  CPU_INT32U nbr;
2042 
2043 
2044  nbr = Str_ParseNbr_Int32((CPU_CHAR *)pstr, /* Parse/convert str ... */
2045  (CPU_CHAR **)pstr_next,
2046  (CPU_INT08U )nbr_base,
2047  (CPU_BOOLEAN )DEF_NO, /* ... as unsigned int (see Note #2a2). */
2048  (CPU_BOOLEAN *)0);
2049 
2050  return (nbr);
2051 }

函数调用图:

CPU_INT32S Str_ParseNbr_Int32S ( CPU_CHAR pstr,
CPU_CHAR **  pstr_next,
CPU_INT08U  nbr_base 
)

在文件 lib_str.c2252 行定义.

参考 DEF_INT_32S_MAX_VAL, DEF_INT_32S_MIN_VAL, DEF_INT_32S_MIN_VAL_ONES_CPL, DEF_NO, DEF_YES , 以及 Str_ParseNbr_Int32().

2255 {
2256  CPU_INT32S nbr;
2257  CPU_INT32U nbr_abs;
2258  CPU_BOOLEAN nbr_neg;
2259 
2260 
2261  nbr_abs = Str_ParseNbr_Int32((CPU_CHAR *) pstr, /* Parse/convert str ... */
2262  (CPU_CHAR **) pstr_next,
2263  (CPU_INT08U ) nbr_base,
2264  (CPU_BOOLEAN ) DEF_YES, /* ... as signed int (see Note #2a2). */
2265  (CPU_BOOLEAN *)&nbr_neg);
2266 
2267  if (nbr_neg == DEF_NO) { /* Chk for neg nbr & ovf/undf (see Note #2a3A1). */
2269  : (CPU_INT32S)nbr_abs;
2270  } else {
2272  : -(CPU_INT32S)nbr_abs;
2273  }
2274 
2275  return (nbr);
2276 }

函数调用图:

变量说明

const CPU_INT32U Str_MultOvfThTbl_Int32U[]
static

在文件 lib_str.c102 行定义.

参考自 Str_FmtNbr_Int32() , 以及 Str_ParseNbr_Int32().