]> git.proxmox.com Git - mirror_edk2.git/blob - StdLib/Include/sys/_ctype.h
Standard Libraries for EDK II.
[mirror_edk2.git] / StdLib / Include / sys / _ctype.h
1 /** @file
2 Implementation specific support for Single-byte character classification and
3 case conversion macros and function declarations.
4
5 This file is intended to only be included by <ctype.h>.
6
7 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
8 This program and the accompanying materials are licensed and made available under
9 the terms and conditions of the BSD License that accompanies this distribution.
10 The full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.
12
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15
16 **/
17 #ifndef _CTYPE_H
18 #error This file, <sys/_ctype.h>, may only be included by <ctype.h>.
19 #endif
20
21 __BEGIN_DECLS
22 extern const UINT16 *_cClass; // Locale independent pointer to Character Classification Table
23 extern const UINT8 *_uConvT; // Locale independent pointer to Lowercase to Uppercase Conversion Table
24 extern const UINT8 *_lConvT; // Locale independent pointer to Uppercase to Lowercase Conversion Table
25
26 extern int __isCClass( int _c, unsigned int mask); // Internal character classification function
27 __END_DECLS
28
29
30 // Character Class bit masks
31 #define _CC 0x0001U // Control Characters
32 #define _CW 0x0002U // White Space
33 #define _CP 0x0004U // Punctuation
34 #define _CD 0x0008U // Digits [0-9]
35 #define _CU 0x0010U // Uppercase Letter [A-Z]
36 #define _CL 0x0020U // Lowercase Letter [a-z]
37 #define _CX 0x0040U // Hexadecimal Digits [A-Fa-f]
38 #define _C0 0x0080U
39 #define _CS 0x0100U // Space Characters, ' ' in C locale
40 #define _CG 0x0200U // Graphic Characters
41 #define _CB 0x0400U // Blank Characters, ' ' and '\t' in C locale
42 #define _C4 0x0800U
43 #define _XA 0x1000U // eXtra Alpha characters not in _CU or _CL
44 #define _C6 0x2000U
45 #define _C7 0x4000U
46 #define _C8 0x8000U
47
48 #ifndef NO_CTYPE_MACROS
49 #define __isCClass( _c, mask) (((_c) < 0 || (_c) > 127) ? 0 : (_cClass[(_c)] & (mask)))
50 #define __toLower( _c) ((__isCClass( ((int)_c), (_CU))) ? _lConvT[(_c)] : (_c))
51 #define __toUpper( _c) ((__isCClass( ((int)_c), (_CL))) ? _uConvT[(_c)] : (_c))
52 #endif /* NO_CTYPE_MACROS */
53
54 /* Macros used by implementation functions */
55 #define __isHexLetter(_c) (__isCClass( (int)c, (_CX)))
56
57 #ifdef _CTYPE_PRIVATE
58 #define _CTYPE_NUM_CHARS (256)
59
60 #define _CTYPE_ID "BSDCTYPE"
61 #define _CTYPE_REV 2
62
63 extern const UINT16 _C_CharClassTable[];
64 extern const UINT8 _C_ToUpperTable[];
65 extern const UINT8 _C_ToLowerTable[];
66 #endif