| /** @file | |
| Character classification and case conversion tables, and functions, | |
| for the C Standard Library as required to implement ctype.h. | |
| These are the default, C locale, tables. | |
| Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available under | |
| the terms and conditions of the BSD License that accompanies this distribution. | |
| The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #include <LibConfig.h> | |
| #include <ctype.h> | |
| /// ASCII-7 Character Classification Table | |
| const UINT16 _C_CharClassTable[128] = { | |
| /* 00 NUL */ ( _CC ), | |
| /* 01 SOH */ ( _CC ), | |
| /* 02 STX */ ( _CC ), | |
| /* 03 ETX */ ( _CC ), | |
| /* 04 EOT */ ( _CC ), | |
| /* 05 ENQ */ ( _CC ), | |
| /* 06 ACK */ ( _CC ), | |
| /* 07 BEL */ ( _CC ), | |
| /* 08 BS */ ( _CC ), | |
| /* 09 TAB */ ( _CC | _CW | _CB ), | |
| /* 0A LF */ ( _CC | _CW ), | |
| /* 0B VT */ ( _CC | _CW ), | |
| /* 0C FF */ ( _CC | _CW ), | |
| /* 0D CR */ ( _CC | _CW ), | |
| /* 0E SO */ ( _CC ), | |
| /* 0F SI */ ( _CC ), | |
| /* 10 DLE */ ( _CC ), | |
| /* 11 DC1 */ ( _CC ), | |
| /* 12 DC2 */ ( _CC ), | |
| /* 13 DC3 */ ( _CC ), | |
| /* 14 DC4 */ ( _CC ), | |
| /* 15 NAK */ ( _CC ), | |
| /* 16 SYN */ ( _CC ), | |
| /* 17 ETB */ ( _CC ), | |
| /* 18 CAN */ ( _CC ), | |
| /* 19 EM */ ( _CC ), | |
| /* 1A SUB */ ( _CC ), | |
| /* 1B ESC */ ( _CC ), | |
| /* 1C FS */ ( _CC ), | |
| /* 1D GS */ ( _CC ), | |
| /* 1E RS */ ( _CC ), | |
| /* 1F US */ ( _CC ), | |
| /* 20 ' ' */ ( _CW | _CS | _CB ), | |
| /* 21 '!' */ ( _CP | _CG ), | |
| /* 22 '"' */ ( _CP | _CG ), | |
| /* 23 '#' */ ( _CP | _CG ), | |
| /* 24 '$' */ ( _CP | _CG ), | |
| /* 25 '%' */ ( _CP | _CG ), | |
| /* 26 '&' */ ( _CP | _CG ), | |
| /* 27 '\''*/ ( _CP | _CG | _C0 ), | |
| /* 28 '(' */ ( _CP | _CG ), | |
| /* 29 ')' */ ( _CP | _CG ), | |
| /* 2A '*' */ ( _CP | _CG ), | |
| /* 2B '+' */ ( _CP | _CG ), | |
| /* 2C ',' */ ( _CP | _CG ), | |
| /* 2D '-' */ ( _CP | _CG ), | |
| /* 2E '.' */ ( _CP | _CG ), | |
| /* 2F '/' */ ( _CP | _CG | _C0 ), | |
| /* 30 '0' */ ( _CD | _CG ), | |
| /* 31 '1' */ ( _CD | _CG ), | |
| /* 32 '2' */ ( _CD | _CG ), | |
| /* 33 '3' */ ( _CD | _CG ), | |
| /* 34 '4' */ ( _CD | _CG ), | |
| /* 35 '5' */ ( _CD | _CG ), | |
| /* 36 '6' */ ( _CD | _CG ), | |
| /* 37 '7' */ ( _CD | _CG ), | |
| /* 38 '8' */ ( _CD | _CG ), | |
| /* 39 '9' */ ( _CD | _CG ), | |
| /* 3A ':' */ ( _CP | _CG ), | |
| /* 3B ';' */ ( _CP | _CG ), | |
| /* 3C '<' */ ( _CP | _CG ), | |
| /* 3D '=' */ ( _CP | _CG ), | |
| /* 3E '>' */ ( _CP | _CG ), | |
| /* 3F '?' */ ( _CP | _CG ), | |
| /* 40 '@' */ ( _CP | _CG ), | |
| /* 41 'A' */ ( _CU | _CX | _CG ), | |
| /* 42 'B' */ ( _CU | _CX | _CG ), | |
| /* 43 'C' */ ( _CU | _CX | _CG ), | |
| /* 44 'D' */ ( _CU | _CX | _CG ), | |
| /* 45 'E' */ ( _CU | _CX | _CG ), | |
| /* 46 'F' */ ( _CU | _CX | _CG ), | |
| /* 47 'G' */ ( _CU | _CG ), | |
| /* 48 'H' */ ( _CU | _CG ), | |
| /* 49 'I' */ ( _CU | _CG ), | |
| /* 4A 'J' */ ( _CU | _CG ), | |
| /* 4B 'K' */ ( _CU | _CG ), | |
| /* 4C 'L' */ ( _CU | _CG ), | |
| /* 4D 'M' */ ( _CU | _CG ), | |
| /* 4E 'N' */ ( _CU | _CG ), | |
| /* 4F 'O' */ ( _CU | _CG ), | |
| /* 50 'P' */ ( _CU | _CG ), | |
| /* 51 'Q' */ ( _CU | _CG ), | |
| /* 52 'R' */ ( _CU | _CG ), | |
| /* 53 'S' */ ( _CU | _CG ), | |
| /* 54 'T' */ ( _CU | _CG ), | |
| /* 55 'U' */ ( _CU | _CG ), | |
| /* 56 'V' */ ( _CU | _CG ), | |
| /* 57 'W' */ ( _CU | _CG ), | |
| /* 58 'X' */ ( _CU | _CG ), | |
| /* 59 'Y' */ ( _CU | _CG ), | |
| /* 5A 'Z' */ ( _CU | _CG ), | |
| /* 5B '[' */ ( _CP | _CG ), | |
| /* 5C '\' */ ( _CP | _CG ), | |
| /* 5D ']' */ ( _CP | _CG ), | |
| /* 5E '^' */ ( _CP | _CG ), | |
| /* 5F '_' */ ( _CP | _CG ), | |
| /* 60 '`' */ ( _CP | _CG ), | |
| /* 61 'a' */ ( _CL | _CX | _CG ), | |
| /* 62 'b' */ ( _CL | _CX | _CG ), | |
| /* 63 'c' */ ( _CL | _CX | _CG ), | |
| /* 64 'd' */ ( _CL | _CX | _CG ), | |
| /* 65 'e' */ ( _CL | _CX | _CG ), | |
| /* 66 'f' */ ( _CL | _CX | _CG ), | |
| /* 67 'g' */ ( _CL | _CG ), | |
| /* 68 'h' */ ( _CL | _CG ), | |
| /* 69 'i' */ ( _CL | _CG ), | |
| /* 6A 'j' */ ( _CL | _CG ), | |
| /* 6B 'k' */ ( _CL | _CG ), | |
| /* 6C 'l' */ ( _CL | _CG ), | |
| /* 6D 'm' */ ( _CL | _CG ), | |
| /* 6E 'n' */ ( _CL | _CG ), | |
| /* 6F 'o' */ ( _CL | _CG ), | |
| /* 70 'p' */ ( _CL | _CG ), | |
| /* 71 'q' */ ( _CL | _CG ), | |
| /* 72 'r' */ ( _CL | _CG ), | |
| /* 73 's' */ ( _CL | _CG ), | |
| /* 74 't' */ ( _CL | _CG ), | |
| /* 75 'u' */ ( _CL | _CG ), | |
| /* 76 'v' */ ( _CL | _CG ), | |
| /* 77 'w' */ ( _CL | _CG ), | |
| /* 78 'x' */ ( _CL | _CG ), | |
| /* 79 'y' */ ( _CL | _CG ), | |
| /* 7A 'z' */ ( _CL | _CG ), | |
| /* 7B '{' */ ( _CP | _CG ), | |
| /* 7C '|' */ ( _CP | _CG ), | |
| /* 7D '}' */ ( _CP | _CG ), | |
| /* 7E '~' */ ( _CP | _CG ), | |
| /* 7F DEL */ ( _CC ) | |
| }; | |
| /// ASCII-7 Upper case to Lower case character conversion table | |
| const UINT8 _C_ToLowerTable[128] = { | |
| /* 00 NUL */ 0x00, /* 01 SOH */ 0x01, | |
| /* 02 STX */ 0x02, /* 03 ETX */ 0x03, | |
| /* 04 EOT */ 0x04, /* 05 ENQ */ 0x05, | |
| /* 06 ACK */ 0x06, /* 07 BEL */ 0x07, | |
| /* 08 BS */ 0x08, /* 09 TAB */ 0x09, | |
| /* 0A LF */ 0x0A, /* 0B VT */ 0x0B, | |
| /* 0C FF */ 0x0C, /* 0D CR */ 0x0D, | |
| /* 0E SO */ 0x0E, /* 0F SI */ 0x0F, | |
| /* 10 DLE */ 0x10, /* 11 DC1 */ 0x11, | |
| /* 12 DC2 */ 0x12, /* 13 DC3 */ 0x13, | |
| /* 14 DC4 */ 0x14, /* 15 NAK */ 0x15, | |
| /* 16 SYN */ 0x16, /* 17 ETB */ 0x17, | |
| /* 18 CAN */ 0x18, /* 19 EM */ 0x19, | |
| /* 1A SUB */ 0x1A, /* 1B ESC */ 0x1B, | |
| /* 1C FS */ 0x1C, /* 1D GS */ 0x1D, | |
| /* 1E RS */ 0x1E, /* 1F US */ 0x1F, | |
| /* 20 ' ' */ 0x20, /* 21 '!' */ 0x21, | |
| /* 22 '"' */ 0x22, /* 23 '#' */ 0x23, | |
| /* 24 '$' */ 0x24, /* 25 '%' */ 0x25, | |
| /* 26 '&' */ 0x26, /* 27 '\''*/ 0x27, | |
| /* 28 '(' */ 0x28, /* 29 ')' */ 0x29, | |
| /* 2A '*' */ 0x2A, /* 2B '+' */ 0x2B, | |
| /* 2C ',' */ 0x2C, /* 2D '-' */ 0x2D, | |
| /* 2E '.' */ 0x2E, /* 2F '/' */ 0x2F, | |
| /* 30 '0' */ 0x30, /* 31 '1' */ 0x31, | |
| /* 32 '2' */ 0x32, /* 33 '3' */ 0x33, | |
| /* 34 '4' */ 0x34, /* 35 '5' */ 0x35, | |
| /* 36 '6' */ 0x36, /* 37 '7' */ 0x37, | |
| /* 38 '8' */ 0x38, /* 39 '9' */ 0x39, | |
| /* 3A ':' */ 0x3A, /* 3B ';' */ 0x3B, | |
| /* 3C '<' */ 0x3C, /* 3D '=' */ 0x3D, | |
| /* 3E '>' */ 0x3E, /* 3F '?' */ 0x3F, | |
| /* 40 '@' */ 0x40, /* 41 'A' */ 0x61, | |
| /* 42 'B' */ 0x62, /* 43 'C' */ 0x63, | |
| /* 44 'D' */ 0x64, /* 45 'E' */ 0x65, | |
| /* 46 'F' */ 0x66, /* 47 'G' */ 0x67, | |
| /* 48 'H' */ 0x68, /* 49 'I' */ 0x69, | |
| /* 4A 'J' */ 0x6A, /* 4B 'K' */ 0x6B, | |
| /* 4C 'L' */ 0x6C, /* 4D 'M' */ 0x6D, | |
| /* 4E 'N' */ 0x6E, /* 4F 'O' */ 0x6F, | |
| /* 50 'P' */ 0x70, /* 51 'Q' */ 0x71, | |
| /* 52 'R' */ 0x72, /* 53 'S' */ 0x73, | |
| /* 54 'T' */ 0x74, /* 55 'U' */ 0x75, | |
| /* 56 'V' */ 0x76, /* 57 'W' */ 0x77, | |
| /* 58 'X' */ 0x78, /* 59 'Y' */ 0x79, | |
| /* 5A 'Z' */ 0x7A, /* 5B '[' */ 0x5B, | |
| /* 5C '\' */ 0x5C, /* 5D ']' */ 0x5D, | |
| /* 5E '^' */ 0x5E, /* 5F '_' */ 0x5F, | |
| /* 60 '`' */ 0x60, /* 61 'a' */ 0x61, | |
| /* 62 'b' */ 0x62, /* 63 'c' */ 0x63, | |
| /* 64 'd' */ 0x64, /* 65 'e' */ 0x65, | |
| /* 66 'f' */ 0x66, /* 67 'g' */ 0x67, | |
| /* 68 'h' */ 0x68, /* 69 'i' */ 0x69, | |
| /* 6A 'j' */ 0x6A, /* 6B 'k' */ 0x6B, | |
| /* 6C 'l' */ 0x6C, /* 6D 'm' */ 0x6D, | |
| /* 6E 'n' */ 0x6E, /* 6F 'o' */ 0x6F, | |
| /* 70 'p' */ 0x70, /* 71 'q' */ 0x71, | |
| /* 72 'r' */ 0x72, /* 73 's' */ 0x73, | |
| /* 74 't' */ 0x74, /* 75 'u' */ 0x75, | |
| /* 76 'v' */ 0x76, /* 77 'w' */ 0x77, | |
| /* 78 'x' */ 0x78, /* 79 'y' */ 0x79, | |
| /* 7A 'z' */ 0x7A, /* 7B '{' */ 0x7B, | |
| /* 7C '|' */ 0x7C, /* 7D '}' */ 0x7D, | |
| /* 7E '~' */ 0x7E, /* 7F DEL */ 0x7F | |
| }; | |
| /// ASCII-7 Lower case to Upper case character conversion table | |
| const UINT8 _C_ToUpperTable[128] = { | |
| /* 00 NUL */ 0x00, /* 01 SOH */ 0x01, | |
| /* 02 STX */ 0x02, /* 03 ETX */ 0x03, | |
| /* 04 EOT */ 0x04, /* 05 ENQ */ 0x05, | |
| /* 06 ACK */ 0x06, /* 07 BEL */ 0x07, | |
| /* 08 BS */ 0x08, /* 09 TAB */ 0x09, | |
| /* 0A LF */ 0x0A, /* 0B VT */ 0x0B, | |
| /* 0C FF */ 0x0C, /* 0D CR */ 0x0D, | |
| /* 0E SO */ 0x0E, /* 0F SI */ 0x0F, | |
| /* 10 DLE */ 0x10, /* 11 DC1 */ 0x11, | |
| /* 12 DC2 */ 0x12, /* 13 DC3 */ 0x13, | |
| /* 14 DC4 */ 0x14, /* 15 NAK */ 0x15, | |
| /* 16 SYN */ 0x16, /* 17 ETB */ 0x17, | |
| /* 18 CAN */ 0x18, /* 19 EM */ 0x19, | |
| /* 1A SUB */ 0x1A, /* 1B ESC */ 0x1B, | |
| /* 1C FS */ 0x1C, /* 1D GS */ 0x1D, | |
| /* 1E RS */ 0x1E, /* 1F US */ 0x1F, | |
| /* 20 ' ' */ 0x20, /* 21 '!' */ 0x21, | |
| /* 22 '"' */ 0x22, /* 23 '#' */ 0x23, | |
| /* 24 '$' */ 0x24, /* 25 '%' */ 0x25, | |
| /* 26 '&' */ 0x26, /* 27 '\''*/ 0x27, | |
| /* 28 '(' */ 0x28, /* 29 ')' */ 0x29, | |
| /* 2A '*' */ 0x2A, /* 2B '+' */ 0x2B, | |
| /* 2C ',' */ 0x2C, /* 2D '-' */ 0x2D, | |
| /* 2E '.' */ 0x2E, /* 2F '/' */ 0x2F, | |
| /* 30 '0' */ 0x30, /* 31 '1' */ 0x31, | |
| /* 32 '2' */ 0x32, /* 33 '3' */ 0x33, | |
| /* 34 '4' */ 0x34, /* 35 '5' */ 0x35, | |
| /* 36 '6' */ 0x36, /* 37 '7' */ 0x37, | |
| /* 38 '8' */ 0x38, /* 39 '9' */ 0x39, | |
| /* 3A ':' */ 0x3A, /* 3B ';' */ 0x3B, | |
| /* 3C '<' */ 0x3C, /* 3D '=' */ 0x3D, | |
| /* 3E '>' */ 0x3E, /* 3F '?' */ 0x3F, | |
| /* 40 '@' */ 0x40, /* 41 'A' */ 0x41, | |
| /* 42 'B' */ 0x42, /* 43 'C' */ 0x43, | |
| /* 44 'D' */ 0x44, /* 45 'E' */ 0x45, | |
| /* 46 'F' */ 0x46, /* 47 'G' */ 0x47, | |
| /* 48 'H' */ 0x48, /* 49 'I' */ 0x49, | |
| /* 4A 'J' */ 0x4A, /* 4B 'K' */ 0x4B, | |
| /* 4C 'L' */ 0x4C, /* 4D 'M' */ 0x4D, | |
| /* 4E 'N' */ 0x4E, /* 4F 'O' */ 0x4F, | |
| /* 50 'P' */ 0x50, /* 51 'Q' */ 0x51, | |
| /* 52 'R' */ 0x52, /* 53 'S' */ 0x53, | |
| /* 54 'T' */ 0x54, /* 55 'U' */ 0x55, | |
| /* 56 'V' */ 0x56, /* 57 'W' */ 0x57, | |
| /* 58 'X' */ 0x58, /* 59 'Y' */ 0x59, | |
| /* 5A 'Z' */ 0x5A, /* 5B '[' */ 0x5B, | |
| /* 5C '\' */ 0x5C, /* 5D ']' */ 0x5D, | |
| /* 5E '^' */ 0x5E, /* 5F '_' */ 0x5F, | |
| /* 60 '`' */ 0x60, /* 61 'a' */ 0x41, | |
| /* 62 'b' */ 0x42, /* 63 'c' */ 0x43, | |
| /* 64 'd' */ 0x44, /* 65 'e' */ 0x45, | |
| /* 66 'f' */ 0x46, /* 67 'g' */ 0x47, | |
| /* 68 'h' */ 0x48, /* 69 'i' */ 0x49, | |
| /* 6A 'j' */ 0x4A, /* 6B 'k' */ 0x4B, | |
| /* 6C 'l' */ 0x4C, /* 6D 'm' */ 0x4D, | |
| /* 6E 'n' */ 0x4E, /* 6F 'o' */ 0x4F, | |
| /* 70 'p' */ 0x50, /* 71 'q' */ 0x51, | |
| /* 72 'r' */ 0x52, /* 73 's' */ 0x53, | |
| /* 74 't' */ 0x54, /* 75 'u' */ 0x55, | |
| /* 76 'v' */ 0x56, /* 77 'w' */ 0x57, | |
| /* 78 'x' */ 0x58, /* 79 'y' */ 0x59, | |
| /* 7A 'z' */ 0x5A, /* 7B '{' */ 0x7B, | |
| /* 7C '|' */ 0x7C, /* 7D '}' */ 0x7D, | |
| /* 7E '~' */ 0x7E, /* 7F DEL */ 0x7F | |
| }; | |
| /// Default character classification table is 7-bit ASCII | |
| const UINT16 *_cClass = _C_CharClassTable; | |
| /// Default upper to lower conversion table is 7-bit ASCII | |
| const UINT8 *_lConvT = _C_ToLowerTable; | |
| /// Default lower to upper conversion table is 7-bit ASCII | |
| const UINT8 *_uConvT = _C_ToUpperTable; | |
| /** Sets the character classification and case conversion tables for the 'C' locale. | |
| A set of locale-independent pointers are used to point to the classification and | |
| conversion tables for the currently specified locale. This function is used to | |
| establish the tables for the 'C' locale. | |
| **/ | |
| void | |
| __set_C_locale( void ) | |
| { | |
| _cClass = _C_CharClassTable; | |
| _lConvT = _C_ToLowerTable; | |
| _uConvT = _C_ToUpperTable; | |
| } |