/* ********************************************************************************************************* * uC/LIB * CUSTOM LIBRARY MODULES * * (c) Copyright 2004-2014; Micrium, Inc.; Weston, FL * * All rights reserved. Protected by international copyright laws. * * uC/LIB is provided in source form to registered licensees ONLY. It is * illegal to distribute this source code to any third party unless you receive * written permission by an authorized Micrium representative. 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. * * You can find our product's user manual, API reference, release notes and * more information at: https://doc.micrium.com * * You can contact us at: http://www.micrium.com ********************************************************************************************************* */ /* ********************************************************************************************************* * * ASCII CHARACTER OPERATIONS * * Filename : lib_ascii.c * Version : V1.38.01 * Programmer(s) : BAN * ITJ ********************************************************************************************************* * 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) \\lib_*.* * * (2) \\Ports\\\lib*_a.* * * where * directory path for custom library software * directory name for specific processor (CPU) * directory name for specific compiler * * (b) Product-specific library functions are implemented in individual products. * * * (2) (a) ECMA-6 '7-Bit coded Character Set' (6th edition), which corresponds to the * 3rd edition of ISO 646, specifies several versions of a 7-bit character set : * * (1) THE GENERAL VERSION, which allows characters at 0x23 and 0x24 to be given a * set alternate form and allows the characters 0x40, 0x5B, 0x5D, 0x60, 0x7B & * 0x7D to be assigned a "unique graphic character" or to be declared as unused. * All other characters are explicitly specified. * * (2) THE INTERNATIONAL REFERENCE VERSION, which explicitly specifies all characters * in the 7-bit character set. * * (3) NATIONAL & APPLICATION-ORIENTED VERSIONS, which may be derived from the * standard in specified ways. * * (b) The character set represented in this file reproduces the Internation Reference * Version. This is identical to the 7-bit character set which occupies Unicode * characters 0x0000 through 0x007F. The character names are taken from v5.0 of the * Unicode specification, with certain abbreviations so that the resulting #define * names will not violate ANSI C naming restriction : * * (1) For the Latin capital & lowercase letters, the name components 'LETTER_CAPITAL' * & 'LETTER_SMALL' are replaced by 'UPPER' & 'LOWER', respectively. ********************************************************************************************************* */ /* ********************************************************************************************************* * INCLUDE FILES ********************************************************************************************************* */ #define MICRIUM_SOURCE #define LIB_ASCII_MODULE #include /* ********************************************************************************************************* * LOCAL DEFINES ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL CONSTANTS ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL DATA TYPES ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL TABLES ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL GLOBAL VARIABLES ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL FUNCTION PROTOTYPES ********************************************************************************************************* */ /* ********************************************************************************************************* * LOCAL CONFIGURATION ERRORS ********************************************************************************************************* */ /* ********************************************************************************************************* * ASCII_IsAlpha() * * Description : Determine whether a character is an alphabetic character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is an alphabetic character. * * DEF_NO, if character is NOT an alphabetic character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.2.(2) states that "isalpha() returns true only for the * characters for which isupper() or islower() is true". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsAlpha (CPU_CHAR c) { CPU_BOOLEAN alpha; alpha = ASCII_IS_ALPHA(c); return (alpha); } /* ********************************************************************************************************* * ASCII_IsAlphaNum() * * Description : Determine whether a character is an alphanumeric character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is an alphanumeric character. * * DEF_NO, if character is NOT an alphanumeric character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.1.(2) states that "isalnum() ... tests for any character * for which isalpha() or isdigit() is true". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsAlphaNum (CPU_CHAR c) { CPU_BOOLEAN alpha_num; alpha_num = ASCII_IS_ALPHA_NUM(c); return (alpha_num); } /* ********************************************************************************************************* * ASCII_IsLower() * * Description : Determine whether a character is a lowercase alphabetic character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a lowercase alphabetic character. * * DEF_NO, if character is NOT a lowercase alphabetic character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.7.(2) states that "islower() returns true only for * the lowercase letters". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsLower (CPU_CHAR c) { CPU_BOOLEAN lower; lower = ASCII_IS_LOWER(c); return (lower); } /* ********************************************************************************************************* * ASCII_IsUpper() * * Description : Determine whether a character is an uppercase alphabetic character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is an uppercase alphabetic character. * * DEF_NO, if character is NOT an uppercase alphabetic character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.11.(2) states that "isupper() returns true only for * the uppercase letters". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsUpper (CPU_CHAR c) { CPU_BOOLEAN upper; upper = ASCII_IS_UPPER(c); return (upper); } /* ********************************************************************************************************* * ASCII_IsDig() * * Description : Determine whether a character is a decimal-digit character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a decimal-digit character. * * DEF_NO, if character is NOT a decimal-digit character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.5.(2) states that "isdigit() ... tests for any * decimal-digit character". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsDig (CPU_CHAR c) { CPU_BOOLEAN dig; dig = ASCII_IS_DIG(c); return (dig); } /* ********************************************************************************************************* * ASCII_IsDigOct() * * Description : Determine whether a character is an octal-digit character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is an octal-digit character. * * DEF_NO, if character is NOT an octal-digit character. * * Caller(s) : Application. * * Note(s) : none. ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsDigOct (CPU_CHAR c) { CPU_BOOLEAN dig_oct; dig_oct = ASCII_IS_DIG_OCT(c); return (dig_oct); } /* ********************************************************************************************************* * ASCII_IsDigHex() * * Description : Determine whether a character is a hexadecimal-digit character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a hexadecimal-digit character. * * DEF_NO, if character is NOT a hexadecimal-digit character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.12.(2) states that "isxdigit() ... tests for any * hexadecimal-digit character". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsDigHex (CPU_CHAR c) { CPU_BOOLEAN dig_hex; dig_hex = ASCII_IS_DIG_HEX(c); return (dig_hex); } /* ********************************************************************************************************* * ASCII_IsBlank() * * Description : Determine whether a character is a standard blank character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a standard blank character. * * DEF_NO, if character is NOT a standard blank character. * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.1.3.(2) states that "isblank() returns true only for * the standard blank characters". * * (b) ISO/IEC 9899:TC2, Section 7.4.1.3.(2) defines "the standard blank characters" as * the "space (' '), and horizontal tab ('\t')". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsBlank (CPU_CHAR c) { CPU_BOOLEAN blank; blank = ASCII_IS_BLANK(c); return (blank); } /* ********************************************************************************************************* * ASCII_IsSpace() * * Description : Determine whether a character is a white-space character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a white-space character. * * DEF_NO, if character is NOT a white-space character. * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.1.10.(2) states that "isspace() returns true only * for the standard white-space characters". * * (b) ISO/IEC 9899:TC2, Section 7.4.1.10.(2) defines "the standard white-space characters" * as the "space (' '), form feed ('\f'), new-line ('\n'), carriage return ('\r'), * horizontal tab ('\t'), and vertical tab ('\v')". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsSpace (CPU_CHAR c) { CPU_BOOLEAN space; space = ASCII_IS_SPACE(c); return (space); } /* ********************************************************************************************************* * ASCII_IsPrint() * * Description : Determine whether a character is a printing character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a printing character. * * DEF_NO, if character is NOT a printing character. * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.1.8.(2) states that "isprint() ... tests for any * printing character including space (' ')". * * (b) ISO/IEC 9899:TC2, Section 7.4.(3), Note 169, states that in "the seven-bit US * ASCII character set, the printing characters are those whose values lie from * 0x20 (space) through 0x7E (tilde)". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsPrint (CPU_CHAR c) { CPU_BOOLEAN print; print = ASCII_IS_PRINT(c); return (print); } /* ********************************************************************************************************* * ASCII_IsGraph() * * Description : Determine whether a character is any printing character except a space character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a graphic character. * * DEF_NO, if character is NOT a graphic character. * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.1.6.(2) states that "isgraph() ... tests for any * printing character except space (' ')". * * (b) ISO/IEC 9899:TC2, Section 7.4.(3), Note 169, states that in "the seven-bit US * ASCII character set, the printing characters are those whose values lie from * 0x20 (space) through 0x7E (tilde)". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsGraph (CPU_CHAR c) { CPU_BOOLEAN graph; graph = ASCII_IS_GRAPH(c); return (graph); } /* ********************************************************************************************************* * ASCII_IsPunct() * * Description : Determine whether a character is a punctuation character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a punctuation character. * * DEF_NO, if character is NOT a punctuation character. * * Caller(s) : Application. * * Note(s) : (1) ISO/IEC 9899:TC2, Section 7.4.1.9.(2) states that "ispunct() returns true for every * printing character for which neither isspace() nor isalnum() is true". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsPunct (CPU_CHAR c) { CPU_BOOLEAN punct; punct = ASCII_IS_PUNCT(c); return (punct); } /* ********************************************************************************************************* * ASCII_IsCtrl() * * Description : Determine whether a character is a control character. * * Argument(s) : c Character to examine. * * Return(s) : DEF_YES, if character is a control character. * * DEF_NO, if character is NOT a control character. * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.1.4.(2) states that "iscntrl() ... tests for any * control character". * * (b) ISO/IEC 9899:TC2, Section 7.4.(3), Note 169, states that in "the seven-bit US * ASCII character set, ... the control characters are those whose values lie from * 0 (NUL) through 0x1F (US), and the character 0x7F (DEL)". ********************************************************************************************************* */ CPU_BOOLEAN ASCII_IsCtrl (CPU_CHAR c) { CPU_BOOLEAN ctrl; ctrl = ASCII_IS_CTRL(c); return (ctrl); } /* ********************************************************************************************************* * ASCII_ToLower() * * Description : Convert uppercase alphabetic character to its corresponding lowercase alphabetic character. * * Argument(s) : c Character to convert. * * Return(s) : Lowercase equivalent of 'c', if character 'c' is an uppercase character (see Note #1b1). * * Character 'c', otherwise (see Note #1b2). * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.2.1.(2) states that "tolower() ... converts an * uppercase letter to a corresponding lowercase letter". * * (b) ISO/IEC 9899:TC2, Section 7.4.2.1.(3) states that : * * (1) (A) "if the argument is a character for which isupper() is true and there are * one or more corresponding characters ... for which islower() is true," ... * (B) "tolower() ... returns one of the corresponding characters;" ... * * (2) "otherwise, the argument is returned unchanged." ********************************************************************************************************* */ CPU_CHAR ASCII_ToLower (CPU_CHAR c) { CPU_CHAR lower; lower = ASCII_TO_LOWER(c); return (lower); } /* ********************************************************************************************************* * ASCII_ToUpper() * * Description : Convert lowercase alphabetic character to its corresponding uppercase alphabetic character. * * Argument(s) : c Character to convert. * * Return(s) : Uppercase equivalent of 'c', if character 'c' is a lowercase character (see Note #1b1). * * Character 'c', otherwise (see Note #1b2). * * Caller(s) : Application. * * Note(s) : (1) (a) ISO/IEC 9899:TC2, Section 7.4.2.2.(2) states that "toupper() ... converts a * lowercase letter to a corresponding uppercase letter". * * (b) ISO/IEC 9899:TC2, Section 7.4.2.2.(3) states that : * * (1) (A) "if the argument is a character for which islower() is true and there are * one or more corresponding characters ... for which isupper() is true," ... * (B) "toupper() ... returns one of the corresponding characters;" ... * * (2) "otherwise, the argument is returned unchanged." ********************************************************************************************************* */ CPU_CHAR ASCII_ToUpper (CPU_CHAR c) { CPU_CHAR upper; upper = ASCII_TO_UPPER(c); return (upper); } /* ********************************************************************************************************* * ASCII_Cmp() * * Description : Determine if two characters are identical (case-insensitive). * * Argument(s) : c1 First character. * * c2 Second character. * * Return(s) : DEF_YES, if the characters are identical. * * DEF_NO, if the characters are NOT identical. * * Caller(s) : Application. * * Note(s) : none. ********************************************************************************************************* */ CPU_BOOLEAN ASCII_Cmp (CPU_CHAR c1, CPU_CHAR c2) { CPU_CHAR c1_upper; CPU_CHAR c2_upper; CPU_BOOLEAN cmp; c1_upper = ASCII_ToUpper(c1); c2_upper = ASCII_ToUpper(c2); cmp = (c1_upper == c2_upper) ? (DEF_YES) : (DEF_NO); return (cmp); }