From ce7a5ef4bc04ee3ca9d2f42377ca6593d8492a52 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 29 Jul 1996 03:49:00 +0000 Subject: Sun Jul 28 23:46:14 1996 Roland McGrath * time/strftime.c (strftime: do_number): Initialize PRINTED to MAXDIGITS in case P is null and so sprintf is never actually called. Mon Jul 29 02:46:23 1996 Ulrich Drepper Add support for the to-be-written internationalized regexp. This code must be able to use collation symbols and collation equivalent classes. * locale/C-collate.c (_nl_C_LC_COLLATE_symbol_hash, _nl_C_LC_COLLATE_symbol_strings, _nl_C_LC_COLLATE_symbol_classes): New global variables for collation classes. * locale/categories.def: Add new descriptions for collation symbols and collation classes. * locale/langinfo.h: Add constants for collation symbols and collation classes. * locale/lc-collate.c: Add new global variables for collation symbols and collation classes. (_nl_postload_collate): Initialize new variables. * locale/programs/ld-collate.c: Add code to emit tables for collation symbols and collation classes. * locale/programs/locales.h: Change prototype for `collate_output'. * locale/programs/locfile.c (write_all_categories): Call `collate_output' with new argument. * locale/localeinfo.h: Add declaration for new global vars. (union locale_data_value): New member wstr for `wchar_t' strings. * locale/programs/locale-spec.c: Handle `collate-classes' keyword and print information about available collation classes. * locale/strlen-hash.h: New file. Simple hashing function which takes a string with known length. * locale/Makefile (distribute): Add strlen-hash.h. (locale-modules): New var. Additional files for `locale' program. * locale/C-ctype.c: Rewrite to avoid using string for giving values which are of type `u_int32_t'. Correct entry for EOF in toupper and tolower tables. * locale/loadlocale.c (_nl_load_locale): Add cast to prevent warning. * locale/programs/ld-ctype.c (ctype_output): Add code to make sure that all tables in binary file are words aligned. * locale/programs/locfile.c (write_locale_data): Correct handling of LC_MESSAGES locale. Create directory if necessary. * locale/setlocale.c (setlocale): Add cast to avoid warning. * string/string.h: Add prototype for `__strndup'. Wed Jul 24 19:10:00 1996 Andreas Schwab * wcsmbs/mbrtowc.c: Remove unused variable. Sun Jul 28 22:40:25 1996 Roland McGrath * sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): Update to 2.0.10; some problems were reported with an earlier version, and this one is known to work. * sysdeps/generic/dl-sysdep.c (__libc_enable_secure): New variable. * sysdeps/mach/hurd/dl-sysdep.c: Likewise. --- locale/C-collate.c | 155 +++++++- locale/C-ctype.c | 876 ++++++++---------------------------------- locale/Makefile | 2 + locale/categories.def | 57 +-- locale/langinfo.h | 14 +- locale/lc-collate.c | 28 +- locale/loadlocale.c | 2 +- locale/localeinfo.h | 7 + locale/programs/ld-collate.c | 402 ++++++++++++++++++- locale/programs/ld-ctype.c | 33 +- locale/programs/locale-spec.c | 33 ++ locale/programs/locales.h | 3 +- locale/programs/locfile.c | 33 +- locale/setlocale.c | 2 +- locale/strlen-hash.h | 51 +++ 15 files changed, 921 insertions(+), 777 deletions(-) create mode 100644 locale/strlen-hash.h (limited to 'locale') diff --git a/locale/C-collate.c b/locale/C-collate.c index 9535d4faa1..08fb47be06 100644 --- a/locale/C-collate.c +++ b/locale/C-collate.c @@ -17,14 +17,165 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include "localeinfo.h" + +const u_int32_t _nl_C_LC_COLLATE_symbol_hash[446] = +{ + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0x00000154u, 0x00000060u, 0xffffffffu, 0xffffffffu, + 0x0000004fu, 0x0000001au, 0x00000085u, 0x00000030u, 0xffffffffu, 0xffffffffu, + 0x000002beu, 0x000000fau, 0xffffffffu, 0xffffffffu, 0x0000014eu, 0x0000005eu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000bbu, 0x00000044u, + 0xffffffffu, 0xffffffffu, 0x000000efu, 0x0000004cu, 0x00000147u, 0x0000005cu, + 0x000000a0u, 0x0000003eu, 0x00000000u, 0x00000000u, 0x00000038u, 0x00000016u, + 0x00000094u, 0x00000038u, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0x00000140u, 0x0000005au, 0x0000018cu, 0x00000076u, + 0x0000007du, 0x0000002cu, 0xffffffffu, 0xffffffffu, 0x00000115u, 0x00000052u, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000285u, 0x000000deu, + 0x00000171u, 0x0000006cu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0x00000289u, 0x000000e2u, 0x000002d8u, 0x000000feu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000022u, 0x00000010u, + 0x0000028fu, 0x000000e8u, 0x00000069u, 0x00000022u, 0x0000006du, 0x00000024u, + 0x00000071u, 0x00000026u, 0x00000075u, 0x00000028u, 0xffffffffu, 0xffffffffu, + 0x00000295u, 0x000000eeu, 0xffffffffu, 0xffffffffu, 0x00000297u, 0x000000f0u, + 0xffffffffu, 0xffffffffu, 0x00000299u, 0x000000f2u, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000213u, 0x000000b6u, + 0xffffffffu, 0xffffffffu, 0x00000014u, 0x0000000au, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0x00000227u, 0x000000b8u, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x0000015du, 0x00000064u, + 0xffffffffu, 0xffffffffu, 0x000001ffu, 0x000000a2u, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x0000013au, 0x00000058u, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000010u, 0x00000008u, + 0x000001dfu, 0x00000082u, 0x000001e1u, 0x00000084u, 0x00000167u, 0x00000068u, + 0x00000004u, 0x00000002u, 0x000001e7u, 0x0000008au, 0x00000186u, 0x00000074u, + 0x000001ebu, 0x0000008eu, 0x000001edu, 0x00000090u, 0x000001efu, 0x00000092u, + 0x000001f1u, 0x00000094u, 0x000001f3u, 0x00000096u, 0x000001f5u, 0x00000098u, + 0x000001f7u, 0x0000009au, 0x000001f9u, 0x0000009cu, 0x000001a5u, 0x0000007au, + 0x000001fdu, 0x000000a0u, 0x00000030u, 0x00000014u, 0x00000201u, 0x000000a4u, + 0x00000203u, 0x000000a6u, 0x00000205u, 0x000000a8u, 0x00000207u, 0x000000aau, + 0x00000209u, 0x000000acu, 0x0000020bu, 0x000000aeu, 0x0000020du, 0x000000b0u, + 0x0000020fu, 0x000000b2u, 0x00000211u, 0x000000b4u, 0xffffffffu, 0xffffffffu, + 0x0000009cu, 0x0000003cu, 0xffffffffu, 0xffffffffu, 0x00000098u, 0x0000003au, + 0x0000016cu, 0x0000006au, 0xffffffffu, 0xffffffffu, 0x00000269u, 0x000000c2u, + 0x0000026bu, 0x000000c4u, 0x0000026du, 0x000000c6u, 0x0000026fu, 0x000000c8u, + 0x00000271u, 0x000000cau, 0x00000273u, 0x000000ccu, 0x00000275u, 0x000000ceu, + 0x00000277u, 0x000000d0u, 0x00000279u, 0x000000d2u, 0x0000027bu, 0x000000d4u, + 0x0000027du, 0x000000d6u, 0x0000027fu, 0x000000d8u, 0x00000281u, 0x000000dau, + 0x00000283u, 0x000000dcu, 0x00000090u, 0x00000036u, 0x00000287u, 0x000000e0u, + 0x0000005fu, 0x0000001cu, 0x0000028bu, 0x000000e4u, 0x0000028du, 0x000000e6u, + 0x00000089u, 0x00000032u, 0x000001c3u, 0x0000007eu, 0x00000293u, 0x000000ecu, + 0x00000062u, 0x0000001eu, 0x000001b1u, 0x0000007cu, 0x00000130u, 0x00000056u, + 0x0000029bu, 0x000000f4u, 0x00000196u, 0x00000078u, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0x00000081u, 0x0000002eu, 0x00000251u, 0x000000beu, + 0x00000079u, 0x0000002au, 0x0000029du, 0x000000f6u, 0xffffffffu, 0xffffffffu, + 0x0000025cu, 0x000000c0u, 0xffffffffu, 0xffffffffu, 0x0000002cu, 0x00000012u, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000a4u, 0x00000040u, + 0xffffffffu, 0xffffffffu, 0x000002b0u, 0x000000f8u, 0xffffffffu, 0xffffffffu, + 0x000000f9u, 0x0000004eu, 0xffffffffu, 0xffffffffu, 0x0000001cu, 0x0000000eu, + 0xffffffffu, 0xffffffffu, 0x0000017bu, 0x00000070u, 0x0000000cu, 0x00000006u, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000001e3u, 0x00000086u, + 0xffffffffu, 0xffffffffu, 0x000001e5u, 0x00000088u, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0x000001d1u, 0x00000080u, 0x000001e9u, 0x0000008cu, + 0x0000008cu, 0x00000034u, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0x00000291u, 0x000000eau, 0xffffffffu, 0xffffffffu, + 0x00000008u, 0x00000004u, 0xffffffffu, 0xffffffffu, 0x00000181u, 0x00000072u, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x00000231u, 0x000000bau, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000cau, 0x00000046u, + 0x00000246u, 0x000000bcu, 0xffffffffu, 0xffffffffu, 0x000001fbu, 0x0000009eu, + 0x000000d6u, 0x00000048u, 0x00000018u, 0x0000000cu, 0xffffffffu, 0xffffffffu, + 0x00000159u, 0x00000062u, 0xffffffffu, 0xffffffffu, 0x000000aau, 0x00000042u, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000000e2u, 0x0000004au, + 0x00000175u, 0x0000006eu, 0xffffffffu, 0xffffffffu, 0x00000104u, 0x00000050u, + 0x00000065u, 0x00000020u, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0x000002d2u, 0x000000fcu, + 0xffffffffu, 0xffffffffu, 0x00000161u, 0x00000066u, 0x00000045u, 0x00000018u, + 0xffffffffu, 0xffffffffu, 0x00000127u, 0x00000054u, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu, + 0xffffffffu, 0xffffffffu +}; + +const char _nl_C_LC_COLLATE_symbol_strings[732] = + "NUL\0" "SOH\0" "STX\0" "ETX\0" "EOT\0" "ENQ\0" "ACK\0" "alert\0" + "backspace\0" "tab\0" "newline\0" "vertical-tab\0" "form-feed\0" + "carriage-return\0" "SI\0" "SO\0" "DLE\0" "DC1\0" "DC2\0" "DC3\0" "DC4\0" + "NAK\0" "SYN\0" "ETB\0" "CAN\0" "EM\0" "SUB\0" "ESC\0" "IS4\0" "IS3\0" + "IS2\0" "IS1\0" "space\0" "exclamation-mark\0" "quotation-mark\0" + "number-sign\0" "dollar-sign\0" "percent-sign\0" "ampersand\0" + "apostrophe\0" "left-parenthesis\0" "right-parenthesis\0" "asterisk\0" + "plus-sign\0" "comma\0" "hyphen\0" "period\0" "slash\0" "zero\0" "one\0" + "two\0" "three\0" "four\0" "five\0" "six\0" "seven\0" "eight\0" "nine\0" + "colon\0" "semicolon\0" "less-than-sign\0" "equals-sign\0" + "greater-than-sign\0" "question-mark\0" "commercial-at\0" "A\0" "B\0" "C\0" + "D\0" "E\0" "F\0" "G\0" "H\0" "I\0" "J\0" "K\0" "L\0" "M\0" "N\0" "O\0" + "P\0" "Q\0" "R\0" "S\0" "T\0" "U\0" "V\0" "W\0" "X\0" "Y\0" "Z\0" + "left-square-bracket\0" "backslash\0" "right-square-bracket\0" + "circumflex\0" "underscore\0" "grave-accent\0" "a\0" "b\0" "c\0" "d\0" "e\0" + "f\0" "g\0" "h\0" "i\0" "j\0" "k\0" "l\0" "m\0" "n\0" "o\0" "p\0" "q\0" + "r\0" "s\0" "t\0" "u\0" "v\0" "w\0" "x\0" "y\0" "z\0" "left-curly-bracket\0" + "vertical-line\0" "right-curly-bracket\0" "tilde\0" "DEL\0"; + +const u_int32_t _nl_C_LC_COLLATE_symbol_classes[256] = +{ + 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, + 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, + 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, + 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, + 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39, + 1, 40, 1, 41, 1, 42, 1, 43, 1, 44, 1, 45, 1, 46, 1, 47, + 1, 48, 1, 49, 1, 50, 1, 51, 1, 52, 1, 53, 1, 54, 1, 55, + 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, 1, 62, 1, 63, + 1, 64, 1, 65, 1, 66, 1, 67, 1, 68, 1, 69, 1, 70, 1, 71, + 1, 72, 1, 73, 1, 74, 1, 75, 1, 76, 1, 77, 1, 78, 1, 79, + 1, 80, 1, 81, 1, 82, 1, 83, 1, 84, 1, 85, 1, 86, 1, 87, + 1, 88, 1, 89, 1, 90, 1, 91, 1, 92, 1, 93, 1, 94, 1, 95, + 1, 96, 1, 97, 1, 98, 1, 99, 1, 100, 1, 101, 1, 102, 1, 103, + 1, 104, 1, 105, 1, 106, 1, 107, 1, 108, 1, 109, 1, 110, 1, 111, + 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 118, 1, 119, + 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127 +}; + const struct locale_data _nl_C_LC_COLLATE = { _nl_C_name, NULL, 0, /* no file mapped */ - 1, + 21, { - { word: 0 } + { word: 0 }, + { string: NULL }, + { word: 0 }, + { word: 0 }, + { string: NULL }, + { string: NULL }, + { word: 0 }, + { string: NULL }, + { string: NULL }, + { word: 0 }, + { string: NULL }, + { string: NULL }, + { string: NULL }, + { string: NULL }, + { string: NULL }, + { word: 223 }, +#if __BYTE_ORDER == __LITTLE_ENDIAN + { string: NULL }, +#endif + { string: (const char *) _nl_C_LC_COLLATE_symbol_hash }, +#if __BYTE_ORDER == __BIG_ENDIAN + { string: NULL }, +#endif + { string: _nl_C_LC_COLLATE_symbol_strings }, +#if __BYTE_ORDER == __LITTLE_ENDIAN + { string: NULL }, +#endif + { string: (const char *) _nl_C_LC_COLLATE_symbol_classes }, +#if __BYTE_ORDER == __BIG_ENDIAN + { string: NULL }, +#endif } }; diff --git a/locale/C-ctype.c b/locale/C-ctype.c index 89becbdf9f..ab7e68eb6c 100644 --- a/locale/C-ctype.c +++ b/locale/C-ctype.c @@ -174,724 +174,160 @@ const char _nl_C_LC_CTYPE_class32[1024] = /* 0xfc */ "\000\000\002\000" "\000\000\002\000" "\000\000\002\000" /* 0xff */ "\000\000\002\000" ; -#if BYTE_ORDER == LITTLE_ENDIAN -const char _nl_C_LC_CTYPE_toupper[1536] = - /* 0x80 */ "\200\000\000\000" "\201\000\000\000" "\202\000\000\000" - /* 0x83 */ "\203\000\000\000" "\204\000\000\000" "\205\000\000\000" - /* 0x86 */ "\206\000\000\000" "\207\000\000\000" "\210\000\000\000" - /* 0x89 */ "\211\000\000\000" "\212\000\000\000" "\213\000\000\000" - /* 0x8c */ "\214\000\000\000" "\215\000\000\000" "\216\000\000\000" - /* 0x8f */ "\217\000\000\000" "\220\000\000\000" "\221\000\000\000" - /* 0x92 */ "\222\000\000\000" "\223\000\000\000" "\224\000\000\000" - /* 0x95 */ "\225\000\000\000" "\226\000\000\000" "\227\000\000\000" - /* 0x98 */ "\230\000\000\000" "\231\000\000\000" "\232\000\000\000" - /* 0x9b */ "\233\000\000\000" "\234\000\000\000" "\235\000\000\000" - /* 0x9e */ "\236\000\000\000" "\237\000\000\000" "\240\000\000\000" - /* 0xa1 */ "\241\000\000\000" "\242\000\000\000" "\243\000\000\000" - /* 0xa4 */ "\244\000\000\000" "\245\000\000\000" "\246\000\000\000" - /* 0xa7 */ "\247\000\000\000" "\250\000\000\000" "\251\000\000\000" - /* 0xaa */ "\252\000\000\000" "\253\000\000\000" "\254\000\000\000" - /* 0xad */ "\255\000\000\000" "\256\000\000\000" "\257\000\000\000" - /* 0xb0 */ "\260\000\000\000" "\261\000\000\000" "\262\000\000\000" - /* 0xb3 */ "\263\000\000\000" "\264\000\000\000" "\265\000\000\000" - /* 0xb6 */ "\266\000\000\000" "\267\000\000\000" "\270\000\000\000" - /* 0xb9 */ "\271\000\000\000" "\272\000\000\000" "\273\000\000\000" - /* 0xbc */ "\274\000\000\000" "\275\000\000\000" "\276\000\000\000" - /* 0xbf */ "\277\000\000\000" "\300\000\000\000" "\301\000\000\000" - /* 0xc2 */ "\302\000\000\000" "\303\000\000\000" "\304\000\000\000" - /* 0xc5 */ "\305\000\000\000" "\306\000\000\000" "\307\000\000\000" - /* 0xc8 */ "\310\000\000\000" "\311\000\000\000" "\312\000\000\000" - /* 0xcb */ "\313\000\000\000" "\314\000\000\000" "\315\000\000\000" - /* 0xce */ "\316\000\000\000" "\317\000\000\000" "\320\000\000\000" - /* 0xd1 */ "\321\000\000\000" "\322\000\000\000" "\323\000\000\000" - /* 0xd4 */ "\324\000\000\000" "\325\000\000\000" "\326\000\000\000" - /* 0xd7 */ "\327\000\000\000" "\330\000\000\000" "\331\000\000\000" - /* 0xda */ "\332\000\000\000" "\333\000\000\000" "\334\000\000\000" - /* 0xdd */ "\335\000\000\000" "\336\000\000\000" "\337\000\000\000" - /* 0xe0 */ "\340\000\000\000" "\341\000\000\000" "\342\000\000\000" - /* 0xe3 */ "\343\000\000\000" "\344\000\000\000" "\345\000\000\000" - /* 0xe6 */ "\346\000\000\000" "\347\000\000\000" "\350\000\000\000" - /* 0xe9 */ "\351\000\000\000" "\352\000\000\000" "\353\000\000\000" - /* 0xec */ "\354\000\000\000" "\355\000\000\000" "\356\000\000\000" - /* 0xef */ "\357\000\000\000" "\360\000\000\000" "\361\000\000\000" - /* 0xf2 */ "\362\000\000\000" "\363\000\000\000" "\364\000\000\000" - /* 0xf5 */ "\365\000\000\000" "\366\000\000\000" "\367\000\000\000" - /* 0xf8 */ "\370\000\000\000" "\371\000\000\000" "\372\000\000\000" - /* 0xfb */ "\373\000\000\000" "\374\000\000\000" "\375\000\000\000" - /* 0xfe */ "\376\000\000\000" "\377\000\000\000" "\000\000\000\000" - /* 0x01 */ "\001\000\000\000" "\002\000\000\000" "\003\000\000\000" - /* 0x04 */ "\004\000\000\000" "\005\000\000\000" "\006\000\000\000" - /* 0x07 */ "\007\000\000\000" "\010\000\000\000" "\011\000\000\000" - /* 0x0a */ "\012\000\000\000" "\013\000\000\000" "\014\000\000\000" - /* 0x0d */ "\015\000\000\000" "\016\000\000\000" "\017\000\000\000" - /* 0x10 */ "\020\000\000\000" "\021\000\000\000" "\022\000\000\000" - /* 0x13 */ "\023\000\000\000" "\024\000\000\000" "\025\000\000\000" - /* 0x16 */ "\026\000\000\000" "\027\000\000\000" "\030\000\000\000" - /* 0x19 */ "\031\000\000\000" "\032\000\000\000" "\033\000\000\000" - /* 0x1c */ "\034\000\000\000" "\035\000\000\000" "\036\000\000\000" - /* 0x1f */ "\037\000\000\000" "\040\000\000\000" "\041\000\000\000" - /* 0x22 */ "\042\000\000\000" "\043\000\000\000" "\044\000\000\000" - /* 0x25 */ "\045\000\000\000" "\046\000\000\000" "\047\000\000\000" - /* 0x28 */ "\050\000\000\000" "\051\000\000\000" "\052\000\000\000" - /* 0x2b */ "\053\000\000\000" "\054\000\000\000" "\055\000\000\000" - /* 0x2e */ "\056\000\000\000" "\057\000\000\000" "\060\000\000\000" - /* 0x31 */ "\061\000\000\000" "\062\000\000\000" "\063\000\000\000" - /* 0x34 */ "\064\000\000\000" "\065\000\000\000" "\066\000\000\000" - /* 0x37 */ "\067\000\000\000" "\070\000\000\000" "\071\000\000\000" - /* 0x3a */ "\072\000\000\000" "\073\000\000\000" "\074\000\000\000" - /* 0x3d */ "\075\000\000\000" "\076\000\000\000" "\077\000\000\000" - /* 0x40 */ "\100\000\000\000" "\101\000\000\000" "\102\000\000\000" - /* 0x43 */ "\103\000\000\000" "\104\000\000\000" "\105\000\000\000" - /* 0x46 */ "\106\000\000\000" "\107\000\000\000" "\110\000\000\000" - /* 0x49 */ "\111\000\000\000" "\112\000\000\000" "\113\000\000\000" - /* 0x4c */ "\114\000\000\000" "\115\000\000\000" "\116\000\000\000" - /* 0x4f */ "\117\000\000\000" "\120\000\000\000" "\121\000\000\000" - /* 0x52 */ "\122\000\000\000" "\123\000\000\000" "\124\000\000\000" - /* 0x55 */ "\125\000\000\000" "\126\000\000\000" "\127\000\000\000" - /* 0x58 */ "\130\000\000\000" "\131\000\000\000" "\132\000\000\000" - /* 0x5b */ "\133\000\000\000" "\134\000\000\000" "\135\000\000\000" - /* 0x5e */ "\136\000\000\000" "\137\000\000\000" "\140\000\000\000" - /* 0x61 */ "\101\000\000\000" "\102\000\000\000" "\103\000\000\000" - /* 0x64 */ "\104\000\000\000" "\105\000\000\000" "\106\000\000\000" - /* 0x67 */ "\107\000\000\000" "\110\000\000\000" "\111\000\000\000" - /* 0x6a */ "\112\000\000\000" "\113\000\000\000" "\114\000\000\000" - /* 0x6d */ "\115\000\000\000" "\116\000\000\000" "\117\000\000\000" - /* 0x70 */ "\120\000\000\000" "\121\000\000\000" "\122\000\000\000" - /* 0x73 */ "\123\000\000\000" "\124\000\000\000" "\125\000\000\000" - /* 0x76 */ "\126\000\000\000" "\127\000\000\000" "\130\000\000\000" - /* 0x79 */ "\131\000\000\000" "\132\000\000\000" "\173\000\000\000" - /* 0x7c */ "\174\000\000\000" "\175\000\000\000" "\176\000\000\000" - /* 0x7f */ "\177\000\000\000" "\200\000\000\000" "\201\000\000\000" - /* 0x82 */ "\202\000\000\000" "\203\000\000\000" "\204\000\000\000" - /* 0x85 */ "\205\000\000\000" "\206\000\000\000" "\207\000\000\000" - /* 0x88 */ "\210\000\000\000" "\211\000\000\000" "\212\000\000\000" - /* 0x8b */ "\213\000\000\000" "\214\000\000\000" "\215\000\000\000" - /* 0x8e */ "\216\000\000\000" "\217\000\000\000" "\220\000\000\000" - /* 0x91 */ "\221\000\000\000" "\222\000\000\000" "\223\000\000\000" - /* 0x94 */ "\224\000\000\000" "\225\000\000\000" "\226\000\000\000" - /* 0x97 */ "\227\000\000\000" "\230\000\000\000" "\231\000\000\000" - /* 0x9a */ "\232\000\000\000" "\233\000\000\000" "\234\000\000\000" - /* 0x9d */ "\235\000\000\000" "\236\000\000\000" "\237\000\000\000" - /* 0xa0 */ "\240\000\000\000" "\241\000\000\000" "\242\000\000\000" - /* 0xa3 */ "\243\000\000\000" "\244\000\000\000" "\245\000\000\000" - /* 0xa6 */ "\246\000\000\000" "\247\000\000\000" "\250\000\000\000" - /* 0xa9 */ "\251\000\000\000" "\252\000\000\000" "\253\000\000\000" - /* 0xac */ "\254\000\000\000" "\255\000\000\000" "\256\000\000\000" - /* 0xaf */ "\257\000\000\000" "\260\000\000\000" "\261\000\000\000" - /* 0xb2 */ "\262\000\000\000" "\263\000\000\000" "\264\000\000\000" - /* 0xb5 */ "\265\000\000\000" "\266\000\000\000" "\267\000\000\000" - /* 0xb8 */ "\270\000\000\000" "\271\000\000\000" "\272\000\000\000" - /* 0xbb */ "\273\000\000\000" "\274\000\000\000" "\275\000\000\000" - /* 0xbe */ "\276\000\000\000" "\277\000\000\000" "\300\000\000\000" - /* 0xc1 */ "\301\000\000\000" "\302\000\000\000" "\303\000\000\000" - /* 0xc4 */ "\304\000\000\000" "\305\000\000\000" "\306\000\000\000" - /* 0xc7 */ "\307\000\000\000" "\310\000\000\000" "\311\000\000\000" - /* 0xca */ "\312\000\000\000" "\313\000\000\000" "\314\000\000\000" - /* 0xcd */ "\315\000\000\000" "\316\000\000\000" "\317\000\000\000" - /* 0xd0 */ "\320\000\000\000" "\321\000\000\000" "\322\000\000\000" - /* 0xd3 */ "\323\000\000\000" "\324\000\000\000" "\325\000\000\000" - /* 0xd6 */ "\326\000\000\000" "\327\000\000\000" "\330\000\000\000" - /* 0xd9 */ "\331\000\000\000" "\332\000\000\000" "\333\000\000\000" - /* 0xdc */ "\334\000\000\000" "\335\000\000\000" "\336\000\000\000" - /* 0xdf */ "\337\000\000\000" "\340\000\000\000" "\341\000\000\000" - /* 0xe2 */ "\342\000\000\000" "\343\000\000\000" "\344\000\000\000" - /* 0xe5 */ "\345\000\000\000" "\346\000\000\000" "\347\000\000\000" - /* 0xe8 */ "\350\000\000\000" "\351\000\000\000" "\352\000\000\000" - /* 0xeb */ "\353\000\000\000" "\354\000\000\000" "\355\000\000\000" - /* 0xee */ "\356\000\000\000" "\357\000\000\000" "\360\000\000\000" - /* 0xf1 */ "\361\000\000\000" "\362\000\000\000" "\363\000\000\000" - /* 0xf4 */ "\364\000\000\000" "\365\000\000\000" "\366\000\000\000" - /* 0xf7 */ "\367\000\000\000" "\370\000\000\000" "\371\000\000\000" - /* 0xfa */ "\372\000\000\000" "\373\000\000\000" "\374\000\000\000" - /* 0xfd */ "\375\000\000\000" "\376\000\000\000" "\377\000\000\000" -; -const char _nl_C_LC_CTYPE_tolower[1536] = - /* 0x80 */ "\200\000\000\000" "\201\000\000\000" "\202\000\000\000" - /* 0x83 */ "\203\000\000\000" "\204\000\000\000" "\205\000\000\000" - /* 0x86 */ "\206\000\000\000" "\207\000\000\000" "\210\000\000\000" - /* 0x89 */ "\211\000\000\000" "\212\000\000\000" "\213\000\000\000" - /* 0x8c */ "\214\000\000\000" "\215\000\000\000" "\216\000\000\000" - /* 0x8f */ "\217\000\000\000" "\220\000\000\000" "\221\000\000\000" - /* 0x92 */ "\222\000\000\000" "\223\000\000\000" "\224\000\000\000" - /* 0x95 */ "\225\000\000\000" "\226\000\000\000" "\227\000\000\000" - /* 0x98 */ "\230\000\000\000" "\231\000\000\000" "\232\000\000\000" - /* 0x9b */ "\233\000\000\000" "\234\000\000\000" "\235\000\000\000" - /* 0x9e */ "\236\000\000\000" "\237\000\000\000" "\240\000\000\000" - /* 0xa1 */ "\241\000\000\000" "\242\000\000\000" "\243\000\000\000" - /* 0xa4 */ "\244\000\000\000" "\245\000\000\000" "\246\000\000\000" - /* 0xa7 */ "\247\000\000\000" "\250\000\000\000" "\251\000\000\000" - /* 0xaa */ "\252\000\000\000" "\253\000\000\000" "\254\000\000\000" - /* 0xad */ "\255\000\000\000" "\256\000\000\000" "\257\000\000\000" - /* 0xb0 */ "\260\000\000\000" "\261\000\000\000" "\262\000\000\000" - /* 0xb3 */ "\263\000\000\000" "\264\000\000\000" "\265\000\000\000" - /* 0xb6 */ "\266\000\000\000" "\267\000\000\000" "\270\000\000\000" - /* 0xb9 */ "\271\000\000\000" "\272\000\000\000" "\273\000\000\000" - /* 0xbc */ "\274\000\000\000" "\275\000\000\000" "\276\000\000\000" - /* 0xbf */ "\277\000\000\000" "\300\000\000\000" "\301\000\000\000" - /* 0xc2 */ "\302\000\000\000" "\303\000\000\000" "\304\000\000\000" - /* 0xc5 */ "\305\000\000\000" "\306\000\000\000" "\307\000\000\000" - /* 0xc8 */ "\310\000\000\000" "\311\000\000\000" "\312\000\000\000" - /* 0xcb */ "\313\000\000\000" "\314\000\000\000" "\315\000\000\000" - /* 0xce */ "\316\000\000\000" "\317\000\000\000" "\320\000\000\000" - /* 0xd1 */ "\321\000\000\000" "\322\000\000\000" "\323\000\000\000" - /* 0xd4 */ "\324\000\000\000" "\325\000\000\000" "\326\000\000\000" - /* 0xd7 */ "\327\000\000\000" "\330\000\000\000" "\331\000\000\000" - /* 0xda */ "\332\000\000\000" "\333\000\000\000" "\334\000\000\000" - /* 0xdd */ "\335\000\000\000" "\336\000\000\000" "\337\000\000\000" - /* 0xe0 */ "\340\000\000\000" "\341\000\000\000" "\342\000\000\000" - /* 0xe3 */ "\343\000\000\000" "\344\000\000\000" "\345\000\000\000" - /* 0xe6 */ "\346\000\000\000" "\347\000\000\000" "\350\000\000\000" - /* 0xe9 */ "\351\000\000\000" "\352\000\000\000" "\353\000\000\000" - /* 0xec */ "\354\000\000\000" "\355\000\000\000" "\356\000\000\000" - /* 0xef */ "\357\000\000\000" "\360\000\000\000" "\361\000\000\000" - /* 0xf2 */ "\362\000\000\000" "\363\000\000\000" "\364\000\000\000" - /* 0xf5 */ "\365\000\000\000" "\366\000\000\000" "\367\000\000\000" - /* 0xf8 */ "\370\000\000\000" "\371\000\000\000" "\372\000\000\000" - /* 0xfb */ "\373\000\000\000" "\374\000\000\000" "\375\000\000\000" - /* 0xfe */ "\376\000\000\000" "\377\000\000\000" "\000\000\000\000" - /* 0x01 */ "\001\000\000\000" "\002\000\000\000" "\003\000\000\000" - /* 0x04 */ "\004\000\000\000" "\005\000\000\000" "\006\000\000\000" - /* 0x07 */ "\007\000\000\000" "\010\000\000\000" "\011\000\000\000" - /* 0x0a */ "\012\000\000\000" "\013\000\000\000" "\014\000\000\000" - /* 0x0d */ "\015\000\000\000" "\016\000\000\000" "\017\000\000\000" - /* 0x10 */ "\020\000\000\000" "\021\000\000\000" "\022\000\000\000" - /* 0x13 */ "\023\000\000\000" "\024\000\000\000" "\025\000\000\000" - /* 0x16 */ "\026\000\000\000" "\027\000\000\000" "\030\000\000\000" - /* 0x19 */ "\031\000\000\000" "\032\000\000\000" "\033\000\000\000" - /* 0x1c */ "\034\000\000\000" "\035\000\000\000" "\036\000\000\000" - /* 0x1f */ "\037\000\000\000" "\040\000\000\000" "\041\000\000\000" - /* 0x22 */ "\042\000\000\000" "\043\000\000\000" "\044\000\000\000" - /* 0x25 */ "\045\000\000\000" "\046\000\000\000" "\047\000\000\000" - /* 0x28 */ "\050\000\000\000" "\051\000\000\000" "\052\000\000\000" - /* 0x2b */ "\053\000\000\000" "\054\000\000\000" "\055\000\000\000" - /* 0x2e */ "\056\000\000\000" "\057\000\000\000" "\060\000\000\000" - /* 0x31 */ "\061\000\000\000" "\062\000\000\000" "\063\000\000\000" - /* 0x34 */ "\064\000\000\000" "\065\000\000\000" "\066\000\000\000" - /* 0x37 */ "\067\000\000\000" "\070\000\000\000" "\071\000\000\000" - /* 0x3a */ "\072\000\000\000" "\073\000\000\000" "\074\000\000\000" - /* 0x3d */ "\075\000\000\000" "\076\000\000\000" "\077\000\000\000" - /* 0x40 */ "\100\000\000\000" "\141\000\000\000" "\142\000\000\000" - /* 0x43 */ "\143\000\000\000" "\144\000\000\000" "\145\000\000\000" - /* 0x46 */ "\146\000\000\000" "\147\000\000\000" "\150\000\000\000" - /* 0x49 */ "\151\000\000\000" "\152\000\000\000" "\153\000\000\000" - /* 0x4c */ "\154\000\000\000" "\155\000\000\000" "\156\000\000\000" - /* 0x4f */ "\157\000\000\000" "\160\000\000\000" "\161\000\000\000" - /* 0x52 */ "\162\000\000\000" "\163\000\000\000" "\164\000\000\000" - /* 0x55 */ "\165\000\000\000" "\166\000\000\000" "\167\000\000\000" - /* 0x58 */ "\170\000\000\000" "\171\000\000\000" "\172\000\000\000" - /* 0x5b */ "\133\000\000\000" "\134\000\000\000" "\135\000\000\000" - /* 0x5e */ "\136\000\000\000" "\137\000\000\000" "\140\000\000\000" - /* 0x61 */ "\141\000\000\000" "\142\000\000\000" "\143\000\000\000" - /* 0x64 */ "\144\000\000\000" "\145\000\000\000" "\146\000\000\000" - /* 0x67 */ "\147\000\000\000" "\150\000\000\000" "\151\000\000\000" - /* 0x6a */ "\152\000\000\000" "\153\000\000\000" "\154\000\000\000" - /* 0x6d */ "\155\000\000\000" "\156\000\000\000" "\157\000\000\000" - /* 0x70 */ "\160\000\000\000" "\161\000\000\000" "\162\000\000\000" - /* 0x73 */ "\163\000\000\000" "\164\000\000\000" "\165\000\000\000" - /* 0x76 */ "\166\000\000\000" "\167\000\000\000" "\170\000\000\000" - /* 0x79 */ "\171\000\000\000" "\172\000\000\000" "\173\000\000\000" - /* 0x7c */ "\174\000\000\000" "\175\000\000\000" "\176\000\000\000" - /* 0x7f */ "\177\000\000\000" "\200\000\000\000" "\201\000\000\000" - /* 0x82 */ "\202\000\000\000" "\203\000\000\000" "\204\000\000\000" - /* 0x85 */ "\205\000\000\000" "\206\000\000\000" "\207\000\000\000" - /* 0x88 */ "\210\000\000\000" "\211\000\000\000" "\212\000\000\000" - /* 0x8b */ "\213\000\000\000" "\214\000\000\000" "\215\000\000\000" - /* 0x8e */ "\216\000\000\000" "\217\000\000\000" "\220\000\000\000" - /* 0x91 */ "\221\000\000\000" "\222\000\000\000" "\223\000\000\000" - /* 0x94 */ "\224\000\000\000" "\225\000\000\000" "\226\000\000\000" - /* 0x97 */ "\227\000\000\000" "\230\000\000\000" "\231\000\000\000" - /* 0x9a */ "\232\000\000\000" "\233\000\000\000" "\234\000\000\000" - /* 0x9d */ "\235\000\000\000" "\236\000\000\000" "\237\000\000\000" - /* 0xa0 */ "\240\000\000\000" "\241\000\000\000" "\242\000\000\000" - /* 0xa3 */ "\243\000\000\000" "\244\000\000\000" "\245\000\000\000" - /* 0xa6 */ "\246\000\000\000" "\247\000\000\000" "\250\000\000\000" - /* 0xa9 */ "\251\000\000\000" "\252\000\000\000" "\253\000\000\000" - /* 0xac */ "\254\000\000\000" "\255\000\000\000" "\256\000\000\000" - /* 0xaf */ "\257\000\000\000" "\260\000\000\000" "\261\000\000\000" - /* 0xb2 */ "\262\000\000\000" "\263\000\000\000" "\264\000\000\000" - /* 0xb5 */ "\265\000\000\000" "\266\000\000\000" "\267\000\000\000" - /* 0xb8 */ "\270\000\000\000" "\271\000\000\000" "\272\000\000\000" - /* 0xbb */ "\273\000\000\000" "\274\000\000\000" "\275\000\000\000" - /* 0xbe */ "\276\000\000\000" "\277\000\000\000" "\300\000\000\000" - /* 0xc1 */ "\301\000\000\000" "\302\000\000\000" "\303\000\000\000" - /* 0xc4 */ "\304\000\000\000" "\305\000\000\000" "\306\000\000\000" - /* 0xc7 */ "\307\000\000\000" "\310\000\000\000" "\311\000\000\000" - /* 0xca */ "\312\000\000\000" "\313\000\000\000" "\314\000\000\000" - /* 0xcd */ "\315\000\000\000" "\316\000\000\000" "\317\000\000\000" - /* 0xd0 */ "\320\000\000\000" "\321\000\000\000" "\322\000\000\000" - /* 0xd3 */ "\323\000\000\000" "\324\000\000\000" "\325\000\000\000" - /* 0xd6 */ "\326\000\000\000" "\327\000\000\000" "\330\000\000\000" - /* 0xd9 */ "\331\000\000\000" "\332\000\000\000" "\333\000\000\000" - /* 0xdc */ "\334\000\000\000" "\335\000\000\000" "\336\000\000\000" - /* 0xdf */ "\337\000\000\000" "\340\000\000\000" "\341\000\000\000" - /* 0xe2 */ "\342\000\000\000" "\343\000\000\000" "\344\000\000\000" - /* 0xe5 */ "\345\000\000\000" "\346\000\000\000" "\347\000\000\000" - /* 0xe8 */ "\350\000\000\000" "\351\000\000\000" "\352\000\000\000" - /* 0xeb */ "\353\000\000\000" "\354\000\000\000" "\355\000\000\000" - /* 0xee */ "\356\000\000\000" "\357\000\000\000" "\360\000\000\000" - /* 0xf1 */ "\361\000\000\000" "\362\000\000\000" "\363\000\000\000" - /* 0xf4 */ "\364\000\000\000" "\365\000\000\000" "\366\000\000\000" - /* 0xf7 */ "\367\000\000\000" "\370\000\000\000" "\371\000\000\000" - /* 0xfa */ "\372\000\000\000" "\373\000\000\000" "\374\000\000\000" - /* 0xfd */ "\375\000\000\000" "\376\000\000\000" "\377\000\000\000" -; -const char _nl_C_LC_CTYPE_names[1024] = - /* 0x00 */ "\000\000\000\000" "\001\000\000\000" "\002\000\000\000" - /* 0x03 */ "\003\000\000\000" "\004\000\000\000" "\005\000\000\000" - /* 0x06 */ "\006\000\000\000" "\007\000\000\000" "\010\000\000\000" - /* 0x09 */ "\011\000\000\000" "\012\000\000\000" "\013\000\000\000" - /* 0x0c */ "\014\000\000\000" "\015\000\000\000" "\016\000\000\000" - /* 0x0f */ "\017\000\000\000" "\020\000\000\000" "\021\000\000\000" - /* 0x12 */ "\022\000\000\000" "\023\000\000\000" "\024\000\000\000" - /* 0x15 */ "\025\000\000\000" "\026\000\000\000" "\027\000\000\000" - /* 0x18 */ "\030\000\000\000" "\031\000\000\000" "\032\000\000\000" - /* 0x1b */ "\033\000\000\000" "\034\000\000\000" "\035\000\000\000" - /* 0x1e */ "\036\000\000\000" "\037\000\000\000" "\040\000\000\000" - /* 0x21 */ "\041\000\000\000" "\042\000\000\000" "\043\000\000\000" - /* 0x24 */ "\044\000\000\000" "\045\000\000\000" "\046\000\000\000" - /* 0x27 */ "\047\000\000\000" "\050\000\000\000" "\051\000\000\000" - /* 0x2a */ "\052\000\000\000" "\053\000\000\000" "\054\000\000\000" - /* 0x2d */ "\055\000\000\000" "\056\000\000\000" "\057\000\000\000" - /* 0x30 */ "\060\000\000\000" "\061\000\000\000" "\062\000\000\000" - /* 0x33 */ "\063\000\000\000" "\064\000\000\000" "\065\000\000\000" - /* 0x36 */ "\066\000\000\000" "\067\000\000\000" "\070\000\000\000" - /* 0x39 */ "\071\000\000\000" "\072\000\000\000" "\073\000\000\000" - /* 0x3c */ "\074\000\000\000" "\075\000\000\000" "\076\000\000\000" - /* 0x3f */ "\077\000\000\000" "\100\000\000\000" "\101\000\000\000" - /* 0x42 */ "\102\000\000\000" "\103\000\000\000" "\104\000\000\000" - /* 0x45 */ "\105\000\000\000" "\106\000\000\000" "\107\000\000\000" - /* 0x48 */ "\110\000\000\000" "\111\000\000\000" "\112\000\000\000" - /* 0x4b */ "\113\000\000\000" "\114\000\000\000" "\115\000\000\000" - /* 0x4e */ "\116\000\000\000" "\117\000\000\000" "\120\000\000\000" - /* 0x51 */ "\121\000\000\000" "\122\000\000\000" "\123\000\000\000" - /* 0x54 */ "\124\000\000\000" "\125\000\000\000" "\126\000\000\000" - /* 0x57 */ "\127\000\000\000" "\130\000\000\000" "\131\000\000\000" - /* 0x5a */ "\132\000\000\000" "\133\000\000\000" "\134\000\000\000" - /* 0x5d */ "\135\000\000\000" "\136\000\000\000" "\137\000\000\000" - /* 0x60 */ "\140\000\000\000" "\141\000\000\000" "\142\000\000\000" - /* 0x63 */ "\143\000\000\000" "\144\000\000\000" "\145\000\000\000" - /* 0x66 */ "\146\000\000\000" "\147\000\000\000" "\150\000\000\000" - /* 0x69 */ "\151\000\000\000" "\152\000\000\000" "\153\000\000\000" - /* 0x6c */ "\154\000\000\000" "\155\000\000\000" "\156\000\000\000" - /* 0x6f */ "\157\000\000\000" "\160\000\000\000" "\161\000\000\000" - /* 0x72 */ "\162\000\000\000" "\163\000\000\000" "\164\000\000\000" - /* 0x75 */ "\165\000\000\000" "\166\000\000\000" "\167\000\000\000" - /* 0x78 */ "\170\000\000\000" "\171\000\000\000" "\172\000\000\000" - /* 0x7b */ "\173\000\000\000" "\174\000\000\000" "\175\000\000\000" - /* 0x7e */ "\176\000\000\000" "\177\000\000\000" "\200\000\000\000" - /* 0x81 */ "\201\000\000\000" "\202\000\000\000" "\203\000\000\000" - /* 0x84 */ "\204\000\000\000" "\205\000\000\000" "\206\000\000\000" - /* 0x87 */ "\207\000\000\000" "\210\000\000\000" "\211\000\000\000" - /* 0x8a */ "\212\000\000\000" "\213\000\000\000" "\214\000\000\000" - /* 0x8d */ "\215\000\000\000" "\216\000\000\000" "\217\000\000\000" - /* 0x90 */ "\220\000\000\000" "\221\000\000\000" "\222\000\000\000" - /* 0x93 */ "\223\000\000\000" "\224\000\000\000" "\225\000\000\000" - /* 0x96 */ "\226\000\000\000" "\227\000\000\000" "\230\000\000\000" - /* 0x99 */ "\231\000\000\000" "\232\000\000\000" "\233\000\000\000" - /* 0x9c */ "\234\000\000\000" "\235\000\000\000" "\236\000\000\000" - /* 0x9f */ "\237\000\000\000" "\240\000\000\000" "\241\000\000\000" - /* 0xa2 */ "\242\000\000\000" "\243\000\000\000" "\244\000\000\000" - /* 0xa5 */ "\245\000\000\000" "\246\000\000\000" "\247\000\000\000" - /* 0xa8 */ "\250\000\000\000" "\251\000\000\000" "\252\000\000\000" - /* 0xab */ "\253\000\000\000" "\254\000\000\000" "\255\000\000\000" - /* 0xae */ "\256\000\000\000" "\257\000\000\000" "\260\000\000\000" - /* 0xb1 */ "\261\000\000\000" "\262\000\000\000" "\263\000\000\000" - /* 0xb4 */ "\264\000\000\000" "\265\000\000\000" "\266\000\000\000" - /* 0xb7 */ "\267\000\000\000" "\270\000\000\000" "\271\000\000\000" - /* 0xba */ "\272\000\000\000" "\273\000\000\000" "\274\000\000\000" - /* 0xbd */ "\275\000\000\000" "\276\000\000\000" "\277\000\000\000" - /* 0xc0 */ "\300\000\000\000" "\301\000\000\000" "\302\000\000\000" - /* 0xc3 */ "\303\000\000\000" "\304\000\000\000" "\305\000\000\000" - /* 0xc6 */ "\306\000\000\000" "\307\000\000\000" "\310\000\000\000" - /* 0xc9 */ "\311\000\000\000" "\312\000\000\000" "\313\000\000\000" - /* 0xcc */ "\314\000\000\000" "\315\000\000\000" "\316\000\000\000" - /* 0xcf */ "\317\000\000\000" "\320\000\000\000" "\321\000\000\000" - /* 0xd2 */ "\322\000\000\000" "\323\000\000\000" "\324\000\000\000" - /* 0xd5 */ "\325\000\000\000" "\326\000\000\000" "\327\000\000\000" - /* 0xd8 */ "\330\000\000\000" "\331\000\000\000" "\332\000\000\000" - /* 0xdb */ "\333\000\000\000" "\334\000\000\000" "\335\000\000\000" - /* 0xde */ "\336\000\000\000" "\337\000\000\000" "\340\000\000\000" - /* 0xe1 */ "\341\000\000\000" "\342\000\000\000" "\343\000\000\000" - /* 0xe4 */ "\344\000\000\000" "\345\000\000\000" "\346\000\000\000" - /* 0xe7 */ "\347\000\000\000" "\350\000\000\000" "\351\000\000\000" - /* 0xea */ "\352\000\000\000" "\353\000\000\000" "\354\000\000\000" - /* 0xed */ "\355\000\000\000" "\356\000\000\000" "\357\000\000\000" - /* 0xf0 */ "\360\000\000\000" "\361\000\000\000" "\362\000\000\000" - /* 0xf3 */ "\363\000\000\000" "\364\000\000\000" "\365\000\000\000" - /* 0xf6 */ "\366\000\000\000" "\367\000\000\000" "\370\000\000\000" - /* 0xf9 */ "\371\000\000\000" "\372\000\000\000" "\373\000\000\000" - /* 0xfc */ "\374\000\000\000" "\375\000\000\000" "\376\000\000\000" - /* 0xff */ "\377\000\000\000" -; -#elif BYTE_ORDER == BIG_ENDIAN -const char _nl_C_LC_CTYPE_toupper[1536] = - /* 0x80 */ "\000\000\000\200" "\000\000\000\201" "\000\000\000\202" - /* 0x83 */ "\000\000\000\203" "\000\000\000\204" "\000\000\000\205" - /* 0x86 */ "\000\000\000\206" "\000\000\000\207" "\000\000\000\210" - /* 0x89 */ "\000\000\000\211" "\000\000\000\212" "\000\000\000\213" - /* 0x8c */ "\000\000\000\214" "\000\000\000\215" "\000\000\000\216" - /* 0x8f */ "\000\000\000\217" "\000\000\000\220" "\000\000\000\221" - /* 0x92 */ "\000\000\000\222" "\000\000\000\223" "\000\000\000\224" - /* 0x95 */ "\000\000\000\225" "\000\000\000\226" "\000\000\000\227" - /* 0x98 */ "\000\000\000\230" "\000\000\000\231" "\000\000\000\232" - /* 0x9b */ "\000\000\000\233" "\000\000\000\234" "\000\000\000\235" - /* 0x9e */ "\000\000\000\236" "\000\000\000\237" "\000\000\000\240" - /* 0xa1 */ "\000\000\000\241" "\000\000\000\242" "\000\000\000\243" - /* 0xa4 */ "\000\000\000\244" "\000\000\000\245" "\000\000\000\246" - /* 0xa7 */ "\000\000\000\247" "\000\000\000\250" "\000\000\000\251" - /* 0xaa */ "\000\000\000\252" "\000\000\000\253" "\000\000\000\254" - /* 0xad */ "\000\000\000\255" "\000\000\000\256" "\000\000\000\257" - /* 0xb0 */ "\000\000\000\260" "\000\000\000\261" "\000\000\000\262" - /* 0xb3 */ "\000\000\000\263" "\000\000\000\264" "\000\000\000\265" - /* 0xb6 */ "\000\000\000\266" "\000\000\000\267" "\000\000\000\270" - /* 0xb9 */ "\000\000\000\271" "\000\000\000\272" "\000\000\000\273" - /* 0xbc */ "\000\000\000\274" "\000\000\000\275" "\000\000\000\276" - /* 0xbf */ "\000\000\000\277" "\000\000\000\300" "\000\000\000\301" - /* 0xc2 */ "\000\000\000\302" "\000\000\000\303" "\000\000\000\304" - /* 0xc5 */ "\000\000\000\305" "\000\000\000\306" "\000\000\000\307" - /* 0xc8 */ "\000\000\000\310" "\000\000\000\311" "\000\000\000\312" - /* 0xcb */ "\000\000\000\313" "\000\000\000\314" "\000\000\000\315" - /* 0xce */ "\000\000\000\316" "\000\000\000\317" "\000\000\000\320" - /* 0xd1 */ "\000\000\000\321" "\000\000\000\322" "\000\000\000\323" - /* 0xd4 */ "\000\000\000\324" "\000\000\000\325" "\000\000\000\326" - /* 0xd7 */ "\000\000\000\327" "\000\000\000\330" "\000\000\000\331" - /* 0xda */ "\000\000\000\332" "\000\000\000\333" "\000\000\000\334" - /* 0xdd */ "\000\000\000\335" "\000\000\000\336" "\000\000\000\337" - /* 0xe0 */ "\000\000\000\340" "\000\000\000\341" "\000\000\000\342" - /* 0xe3 */ "\000\000\000\343" "\000\000\000\344" "\000\000\000\345" - /* 0xe6 */ "\000\000\000\346" "\000\000\000\347" "\000\000\000\350" - /* 0xe9 */ "\000\000\000\351" "\000\000\000\352" "\000\000\000\353" - /* 0xec */ "\000\000\000\354" "\000\000\000\355" "\000\000\000\356" - /* 0xef */ "\000\000\000\357" "\000\000\000\360" "\000\000\000\361" - /* 0xf2 */ "\000\000\000\362" "\000\000\000\363" "\000\000\000\364" - /* 0xf5 */ "\000\000\000\365" "\000\000\000\366" "\000\000\000\367" - /* 0xf8 */ "\000\000\000\370" "\000\000\000\371" "\000\000\000\372" - /* 0xfb */ "\000\000\000\373" "\000\000\000\374" "\000\000\000\375" - /* 0xfe */ "\000\000\000\376" "\000\000\000\377" "\000\000\000\000" - /* 0x01 */ "\000\000\000\001" "\000\000\000\002" "\000\000\000\003" - /* 0x04 */ "\000\000\000\004" "\000\000\000\005" "\000\000\000\006" - /* 0x07 */ "\000\000\000\007" "\000\000\000\010" "\000\000\000\011" - /* 0x0a */ "\000\000\000\012" "\000\000\000\013" "\000\000\000\014" - /* 0x0d */ "\000\000\000\015" "\000\000\000\016" "\000\000\000\017" - /* 0x10 */ "\000\000\000\020" "\000\000\000\021" "\000\000\000\022" - /* 0x13 */ "\000\000\000\023" "\000\000\000\024" "\000\000\000\025" - /* 0x16 */ "\000\000\000\026" "\000\000\000\027" "\000\000\000\030" - /* 0x19 */ "\000\000\000\031" "\000\000\000\032" "\000\000\000\033" - /* 0x1c */ "\000\000\000\034" "\000\000\000\035" "\000\000\000\036" - /* 0x1f */ "\000\000\000\037" "\000\000\000\040" "\000\000\000\041" - /* 0x22 */ "\000\000\000\042" "\000\000\000\043" "\000\000\000\044" - /* 0x25 */ "\000\000\000\045" "\000\000\000\046" "\000\000\000\047" - /* 0x28 */ "\000\000\000\050" "\000\000\000\051" "\000\000\000\052" - /* 0x2b */ "\000\000\000\053" "\000\000\000\054" "\000\000\000\055" - /* 0x2e */ "\000\000\000\056" "\000\000\000\057" "\000\000\000\060" - /* 0x31 */ "\000\000\000\061" "\000\000\000\062" "\000\000\000\063" - /* 0x34 */ "\000\000\000\064" "\000\000\000\065" "\000\000\000\066" - /* 0x37 */ "\000\000\000\067" "\000\000\000\070" "\000\000\000\071" - /* 0x3a */ "\000\000\000\072" "\000\000\000\073" "\000\000\000\074" - /* 0x3d */ "\000\000\000\075" "\000\000\000\076" "\000\000\000\077" - /* 0x40 */ "\000\000\000\100" "\000\000\000\101" "\000\000\000\102" - /* 0x43 */ "\000\000\000\103" "\000\000\000\104" "\000\000\000\105" - /* 0x46 */ "\000\000\000\106" "\000\000\000\107" "\000\000\000\110" - /* 0x49 */ "\000\000\000\111" "\000\000\000\112" "\000\000\000\113" - /* 0x4c */ "\000\000\000\114" "\000\000\000\115" "\000\000\000\116" - /* 0x4f */ "\000\000\000\117" "\000\000\000\120" "\000\000\000\121" - /* 0x52 */ "\000\000\000\122" "\000\000\000\123" "\000\000\000\124" - /* 0x55 */ "\000\000\000\125" "\000\000\000\126" "\000\000\000\127" - /* 0x58 */ "\000\000\000\130" "\000\000\000\131" "\000\000\000\132" - /* 0x5b */ "\000\000\000\133" "\000\000\000\134" "\000\000\000\135" - /* 0x5e */ "\000\000\000\136" "\000\000\000\137" "\000\000\000\140" - /* 0x61 */ "\000\000\000\101" "\000\000\000\102" "\000\000\000\103" - /* 0x64 */ "\000\000\000\104" "\000\000\000\105" "\000\000\000\106" - /* 0x67 */ "\000\000\000\107" "\000\000\000\110" "\000\000\000\111" - /* 0x6a */ "\000\000\000\112" "\000\000\000\113" "\000\000\000\114" - /* 0x6d */ "\000\000\000\115" "\000\000\000\116" "\000\000\000\117" - /* 0x70 */ "\000\000\000\120" "\000\000\000\121" "\000\000\000\122" - /* 0x73 */ "\000\000\000\123" "\000\000\000\124" "\000\000\000\125" - /* 0x76 */ "\000\000\000\126" "\000\000\000\127" "\000\000\000\130" - /* 0x79 */ "\000\000\000\131" "\000\000\000\132" "\000\000\000\173" - /* 0x7c */ "\000\000\000\174" "\000\000\000\175" "\000\000\000\176" - /* 0x7f */ "\000\000\000\177" "\000\000\000\200" "\000\000\000\201" - /* 0x82 */ "\000\000\000\202" "\000\000\000\203" "\000\000\000\204" - /* 0x85 */ "\000\000\000\205" "\000\000\000\206" "\000\000\000\207" - /* 0x88 */ "\000\000\000\210" "\000\000\000\211" "\000\000\000\212" - /* 0x8b */ "\000\000\000\213" "\000\000\000\214" "\000\000\000\215" - /* 0x8e */ "\000\000\000\216" "\000\000\000\217" "\000\000\000\220" - /* 0x91 */ "\000\000\000\221" "\000\000\000\222" "\000\000\000\223" - /* 0x94 */ "\000\000\000\224" "\000\000\000\225" "\000\000\000\226" - /* 0x97 */ "\000\000\000\227" "\000\000\000\230" "\000\000\000\231" - /* 0x9a */ "\000\000\000\232" "\000\000\000\233" "\000\000\000\234" - /* 0x9d */ "\000\000\000\235" "\000\000\000\236" "\000\000\000\237" - /* 0xa0 */ "\000\000\000\240" "\000\000\000\241" "\000\000\000\242" - /* 0xa3 */ "\000\000\000\243" "\000\000\000\244" "\000\000\000\245" - /* 0xa6 */ "\000\000\000\246" "\000\000\000\247" "\000\000\000\250" - /* 0xa9 */ "\000\000\000\251" "\000\000\000\252" "\000\000\000\253" - /* 0xac */ "\000\000\000\254" "\000\000\000\255" "\000\000\000\256" - /* 0xaf */ "\000\000\000\257" "\000\000\000\260" "\000\000\000\261" - /* 0xb2 */ "\000\000\000\262" "\000\000\000\263" "\000\000\000\264" - /* 0xb5 */ "\000\000\000\265" "\000\000\000\266" "\000\000\000\267" - /* 0xb8 */ "\000\000\000\270" "\000\000\000\271" "\000\000\000\272" - /* 0xbb */ "\000\000\000\273" "\000\000\000\274" "\000\000\000\275" - /* 0xbe */ "\000\000\000\276" "\000\000\000\277" "\000\000\000\300" - /* 0xc1 */ "\000\000\000\301" "\000\000\000\302" "\000\000\000\303" - /* 0xc4 */ "\000\000\000\304" "\000\000\000\305" "\000\000\000\306" - /* 0xc7 */ "\000\000\000\307" "\000\000\000\310" "\000\000\000\311" - /* 0xca */ "\000\000\000\312" "\000\000\000\313" "\000\000\000\314" - /* 0xcd */ "\000\000\000\315" "\000\000\000\316" "\000\000\000\317" - /* 0xd0 */ "\000\000\000\320" "\000\000\000\321" "\000\000\000\322" - /* 0xd3 */ "\000\000\000\323" "\000\000\000\324" "\000\000\000\325" - /* 0xd6 */ "\000\000\000\326" "\000\000\000\327" "\000\000\000\330" - /* 0xd9 */ "\000\000\000\331" "\000\000\000\332" "\000\000\000\333" - /* 0xdc */ "\000\000\000\334" "\000\000\000\335" "\000\000\000\336" - /* 0xdf */ "\000\000\000\337" "\000\000\000\340" "\000\000\000\341" - /* 0xe2 */ "\000\000\000\342" "\000\000\000\343" "\000\000\000\344" - /* 0xe5 */ "\000\000\000\345" "\000\000\000\346" "\000\000\000\347" - /* 0xe8 */ "\000\000\000\350" "\000\000\000\351" "\000\000\000\352" - /* 0xeb */ "\000\000\000\353" "\000\000\000\354" "\000\000\000\355" - /* 0xee */ "\000\000\000\356" "\000\000\000\357" "\000\000\000\360" - /* 0xf1 */ "\000\000\000\361" "\000\000\000\362" "\000\000\000\363" - /* 0xf4 */ "\000\000\000\364" "\000\000\000\365" "\000\000\000\366" - /* 0xf7 */ "\000\000\000\367" "\000\000\000\370" "\000\000\000\371" - /* 0xfa */ "\000\000\000\372" "\000\000\000\373" "\000\000\000\374" - /* 0xfd */ "\000\000\000\375" "\000\000\000\376" "\000\000\000\377" -; -const char _nl_C_LC_CTYPE_tolower[1536] = - /* 0x80 */ "\000\000\000\200" "\000\000\000\201" "\000\000\000\202" - /* 0x83 */ "\000\000\000\203" "\000\000\000\204" "\000\000\000\205" - /* 0x86 */ "\000\000\000\206" "\000\000\000\207" "\000\000\000\210" - /* 0x89 */ "\000\000\000\211" "\000\000\000\212" "\000\000\000\213" - /* 0x8c */ "\000\000\000\214" "\000\000\000\215" "\000\000\000\216" - /* 0x8f */ "\000\000\000\217" "\000\000\000\220" "\000\000\000\221" - /* 0x92 */ "\000\000\000\222" "\000\000\000\223" "\000\000\000\224" - /* 0x95 */ "\000\000\000\225" "\000\000\000\226" "\000\000\000\227" - /* 0x98 */ "\000\000\000\230" "\000\000\000\231" "\000\000\000\232" - /* 0x9b */ "\000\000\000\233" "\000\000\000\234" "\000\000\000\235" - /* 0x9e */ "\000\000\000\236" "\000\000\000\237" "\000\000\000\240" - /* 0xa1 */ "\000\000\000\241" "\000\000\000\242" "\000\000\000\243" - /* 0xa4 */ "\000\000\000\244" "\000\000\000\245" "\000\000\000\246" - /* 0xa7 */ "\000\000\000\247" "\000\000\000\250" "\000\000\000\251" - /* 0xaa */ "\000\000\000\252" "\000\000\000\253" "\000\000\000\254" - /* 0xad */ "\000\000\000\255" "\000\000\000\256" "\000\000\000\257" - /* 0xb0 */ "\000\000\000\260" "\000\000\000\261" "\000\000\000\262" - /* 0xb3 */ "\000\000\000\263" "\000\000\000\264" "\000\000\000\265" - /* 0xb6 */ "\000\000\000\266" "\000\000\000\267" "\000\000\000\270" - /* 0xb9 */ "\000\000\000\271" "\000\000\000\272" "\000\000\000\273" - /* 0xbc */ "\000\000\000\274" "\000\000\000\275" "\000\000\000\276" - /* 0xbf */ "\000\000\000\277" "\000\000\000\300" "\000\000\000\301" - /* 0xc2 */ "\000\000\000\302" "\000\000\000\303" "\000\000\000\304" - /* 0xc5 */ "\000\000\000\305" "\000\000\000\306" "\000\000\000\307" - /* 0xc8 */ "\000\000\000\310" "\000\000\000\311" "\000\000\000\312" - /* 0xcb */ "\000\000\000\313" "\000\000\000\314" "\000\000\000\315" - /* 0xce */ "\000\000\000\316" "\000\000\000\317" "\000\000\000\320" - /* 0xd1 */ "\000\000\000\321" "\000\000\000\322" "\000\000\000\323" - /* 0xd4 */ "\000\000\000\324" "\000\000\000\325" "\000\000\000\326" - /* 0xd7 */ "\000\000\000\327" "\000\000\000\330" "\000\000\000\331" - /* 0xda */ "\000\000\000\332" "\000\000\000\333" "\000\000\000\334" - /* 0xdd */ "\000\000\000\335" "\000\000\000\336" "\000\000\000\337" - /* 0xe0 */ "\000\000\000\340" "\000\000\000\341" "\000\000\000\342" - /* 0xe3 */ "\000\000\000\343" "\000\000\000\344" "\000\000\000\345" - /* 0xe6 */ "\000\000\000\346" "\000\000\000\347" "\000\000\000\350" - /* 0xe9 */ "\000\000\000\351" "\000\000\000\352" "\000\000\000\353" - /* 0xec */ "\000\000\000\354" "\000\000\000\355" "\000\000\000\356" - /* 0xef */ "\000\000\000\357" "\000\000\000\360" "\000\000\000\361" - /* 0xf2 */ "\000\000\000\362" "\000\000\000\363" "\000\000\000\364" - /* 0xf5 */ "\000\000\000\365" "\000\000\000\366" "\000\000\000\367" - /* 0xf8 */ "\000\000\000\370" "\000\000\000\371" "\000\000\000\372" - /* 0xfb */ "\000\000\000\373" "\000\000\000\374" "\000\000\000\375" - /* 0xfe */ "\000\000\000\376" "\000\000\000\377" "\000\000\000\000" - /* 0x01 */ "\000\000\000\001" "\000\000\000\002" "\000\000\000\003" - /* 0x04 */ "\000\000\000\004" "\000\000\000\005" "\000\000\000\006" - /* 0x07 */ "\000\000\000\007" "\000\000\000\010" "\000\000\000\011" - /* 0x0a */ "\000\000\000\012" "\000\000\000\013" "\000\000\000\014" - /* 0x0d */ "\000\000\000\015" "\000\000\000\016" "\000\000\000\017" - /* 0x10 */ "\000\000\000\020" "\000\000\000\021" "\000\000\000\022" - /* 0x13 */ "\000\000\000\023" "\000\000\000\024" "\000\000\000\025" - /* 0x16 */ "\000\000\000\026" "\000\000\000\027" "\000\000\000\030" - /* 0x19 */ "\000\000\000\031" "\000\000\000\032" "\000\000\000\033" - /* 0x1c */ "\000\000\000\034" "\000\000\000\035" "\000\000\000\036" - /* 0x1f */ "\000\000\000\037" "\000\000\000\040" "\000\000\000\041" - /* 0x22 */ "\000\000\000\042" "\000\000\000\043" "\000\000\000\044" - /* 0x25 */ "\000\000\000\045" "\000\000\000\046" "\000\000\000\047" - /* 0x28 */ "\000\000\000\050" "\000\000\000\051" "\000\000\000\052" - /* 0x2b */ "\000\000\000\053" "\000\000\000\054" "\000\000\000\055" - /* 0x2e */ "\000\000\000\056" "\000\000\000\057" "\000\000\000\060" - /* 0x31 */ "\000\000\000\061" "\000\000\000\062" "\000\000\000\063" - /* 0x34 */ "\000\000\000\064" "\000\000\000\065" "\000\000\000\066" - /* 0x37 */ "\000\000\000\067" "\000\000\000\070" "\000\000\000\071" - /* 0x3a */ "\000\000\000\072" "\000\000\000\073" "\000\000\000\074" - /* 0x3d */ "\000\000\000\075" "\000\000\000\076" "\000\000\000\077" - /* 0x40 */ "\000\000\000\100" "\000\000\000\141" "\000\000\000\142" - /* 0x43 */ "\000\000\000\143" "\000\000\000\144" "\000\000\000\145" - /* 0x46 */ "\000\000\000\146" "\000\000\000\147" "\000\000\000\150" - /* 0x49 */ "\000\000\000\151" "\000\000\000\152" "\000\000\000\153" - /* 0x4c */ "\000\000\000\154" "\000\000\000\155" "\000\000\000\156" - /* 0x4f */ "\000\000\000\157" "\000\000\000\160" "\000\000\000\161" - /* 0x52 */ "\000\000\000\162" "\000\000\000\163" "\000\000\000\164" - /* 0x55 */ "\000\000\000\165" "\000\000\000\166" "\000\000\000\167" - /* 0x58 */ "\000\000\000\170" "\000\000\000\171" "\000\000\000\172" - /* 0x5b */ "\000\000\000\133" "\000\000\000\134" "\000\000\000\135" - /* 0x5e */ "\000\000\000\136" "\000\000\000\137" "\000\000\000\140" - /* 0x61 */ "\000\000\000\141" "\000\000\000\142" "\000\000\000\143" - /* 0x64 */ "\000\000\000\144" "\000\000\000\145" "\000\000\000\146" - /* 0x67 */ "\000\000\000\147" "\000\000\000\150" "\000\000\000\151" - /* 0x6a */ "\000\000\000\152" "\000\000\000\153" "\000\000\000\154" - /* 0x6d */ "\000\000\000\155" "\000\000\000\156" "\000\000\000\157" - /* 0x70 */ "\000\000\000\160" "\000\000\000\161" "\000\000\000\162" - /* 0x73 */ "\000\000\000\163" "\000\000\000\164" "\000\000\000\165" - /* 0x76 */ "\000\000\000\166" "\000\000\000\167" "\000\000\000\170" - /* 0x79 */ "\000\000\000\171" "\000\000\000\172" "\000\000\000\173" - /* 0x7c */ "\000\000\000\174" "\000\000\000\175" "\000\000\000\176" - /* 0x7f */ "\000\000\000\177" "\000\000\000\200" "\000\000\000\201" - /* 0x82 */ "\000\000\000\202" "\000\000\000\203" "\000\000\000\204" - /* 0x85 */ "\000\000\000\205" "\000\000\000\206" "\000\000\000\207" - /* 0x88 */ "\000\000\000\210" "\000\000\000\211" "\000\000\000\212" - /* 0x8b */ "\000\000\000\213" "\000\000\000\214" "\000\000\000\215" - /* 0x8e */ "\000\000\000\216" "\000\000\000\217" "\000\000\000\220" - /* 0x91 */ "\000\000\000\221" "\000\000\000\222" "\000\000\000\223" - /* 0x94 */ "\000\000\000\224" "\000\000\000\225" "\000\000\000\226" - /* 0x97 */ "\000\000\000\227" "\000\000\000\230" "\000\000\000\231" - /* 0x9a */ "\000\000\000\232" "\000\000\000\233" "\000\000\000\234" - /* 0x9d */ "\000\000\000\235" "\000\000\000\236" "\000\000\000\237" - /* 0xa0 */ "\000\000\000\240" "\000\000\000\241" "\000\000\000\242" - /* 0xa3 */ "\000\000\000\243" "\000\000\000\244" "\000\000\000\245" - /* 0xa6 */ "\000\000\000\246" "\000\000\000\247" "\000\000\000\250" - /* 0xa9 */ "\000\000\000\251" "\000\000\000\252" "\000\000\000\253" - /* 0xac */ "\000\000\000\254" "\000\000\000\255" "\000\000\000\256" - /* 0xaf */ "\000\000\000\257" "\000\000\000\260" "\000\000\000\261" - /* 0xb2 */ "\000\000\000\262" "\000\000\000\263" "\000\000\000\264" - /* 0xb5 */ "\000\000\000\265" "\000\000\000\266" "\000\000\000\267" - /* 0xb8 */ "\000\000\000\270" "\000\000\000\271" "\000\000\000\272" - /* 0xbb */ "\000\000\000\273" "\000\000\000\274" "\000\000\000\275" - /* 0xbe */ "\000\000\000\276" "\000\000\000\277" "\000\000\000\300" - /* 0xc1 */ "\000\000\000\301" "\000\000\000\302" "\000\000\000\303" - /* 0xc4 */ "\000\000\000\304" "\000\000\000\305" "\000\000\000\306" - /* 0xc7 */ "\000\000\000\307" "\000\000\000\310" "\000\000\000\311" - /* 0xca */ "\000\000\000\312" "\000\000\000\313" "\000\000\000\314" - /* 0xcd */ "\000\000\000\315" "\000\000\000\316" "\000\000\000\317" - /* 0xd0 */ "\000\000\000\320" "\000\000\000\321" "\000\000\000\322" - /* 0xd3 */ "\000\000\000\323" "\000\000\000\324" "\000\000\000\325" - /* 0xd6 */ "\000\000\000\326" "\000\000\000\327" "\000\000\000\330" - /* 0xd9 */ "\000\000\000\331" "\000\000\000\332" "\000\000\000\333" - /* 0xdc */ "\000\000\000\334" "\000\000\000\335" "\000\000\000\336" - /* 0xdf */ "\000\000\000\337" "\000\000\000\340" "\000\000\000\341" - /* 0xe2 */ "\000\000\000\342" "\000\000\000\343" "\000\000\000\344" - /* 0xe5 */ "\000\000\000\345" "\000\000\000\346" "\000\000\000\347" - /* 0xe8 */ "\000\000\000\350" "\000\000\000\351" "\000\000\000\352" - /* 0xeb */ "\000\000\000\353" "\000\000\000\354" "\000\000\000\355" - /* 0xee */ "\000\000\000\356" "\000\000\000\357" "\000\000\000\360" - /* 0xf1 */ "\000\000\000\361" "\000\000\000\362" "\000\000\000\363" - /* 0xf4 */ "\000\000\000\364" "\000\000\000\365" "\000\000\000\366" - /* 0xf7 */ "\000\000\000\367" "\000\000\000\370" "\000\000\000\371" - /* 0xfa */ "\000\000\000\372" "\000\000\000\373" "\000\000\000\374" - /* 0xfd */ "\000\000\000\375" "\000\000\000\376" "\000\000\000\377" -; -const char _nl_C_LC_CTYPE_names[1024] = - /* 0x00 */ "\000\000\000\000" "\000\000\000\001" "\000\000\000\002" - /* 0x03 */ "\000\000\000\003" "\000\000\000\004" "\000\000\000\005" - /* 0x06 */ "\000\000\000\006" "\000\000\000\007" "\000\000\000\010" - /* 0x09 */ "\000\000\000\011" "\000\000\000\012" "\000\000\000\013" - /* 0x0c */ "\000\000\000\014" "\000\000\000\015" "\000\000\000\016" - /* 0x0f */ "\000\000\000\017" "\000\000\000\020" "\000\000\000\021" - /* 0x12 */ "\000\000\000\022" "\000\000\000\023" "\000\000\000\024" - /* 0x15 */ "\000\000\000\025" "\000\000\000\026" "\000\000\000\027" - /* 0x18 */ "\000\000\000\030" "\000\000\000\031" "\000\000\000\032" - /* 0x1b */ "\000\000\000\033" "\000\000\000\034" "\000\000\000\035" - /* 0x1e */ "\000\000\000\036" "\000\000\000\037" "\000\000\000\040" - /* 0x21 */ "\000\000\000\041" "\000\000\000\042" "\000\000\000\043" - /* 0x24 */ "\000\000\000\044" "\000\000\000\045" "\000\000\000\046" - /* 0x27 */ "\000\000\000\047" "\000\000\000\050" "\000\000\000\051" - /* 0x2a */ "\000\000\000\052" "\000\000\000\053" "\000\000\000\054" - /* 0x2d */ "\000\000\000\055" "\000\000\000\056" "\000\000\000\057" - /* 0x30 */ "\000\000\000\060" "\000\000\000\061" "\000\000\000\062" - /* 0x33 */ "\000\000\000\063" "\000\000\000\064" "\000\000\000\065" - /* 0x36 */ "\000\000\000\066" "\000\000\000\067" "\000\000\000\070" - /* 0x39 */ "\000\000\000\071" "\000\000\000\072" "\000\000\000\073" - /* 0x3c */ "\000\000\000\074" "\000\000\000\075" "\000\000\000\076" - /* 0x3f */ "\000\000\000\077" "\000\000\000\100" "\000\000\000\101" - /* 0x42 */ "\000\000\000\102" "\000\000\000\103" "\000\000\000\104" - /* 0x45 */ "\000\000\000\105" "\000\000\000\106" "\000\000\000\107" - /* 0x48 */ "\000\000\000\110" "\000\000\000\111" "\000\000\000\112" - /* 0x4b */ "\000\000\000\113" "\000\000\000\114" "\000\000\000\115" - /* 0x4e */ "\000\000\000\116" "\000\000\000\117" "\000\000\000\120" - /* 0x51 */ "\000\000\000\121" "\000\000\000\122" "\000\000\000\123" - /* 0x54 */ "\000\000\000\124" "\000\000\000\125" "\000\000\000\126" - /* 0x57 */ "\000\000\000\127" "\000\000\000\130" "\000\000\000\131" - /* 0x5a */ "\000\000\000\132" "\000\000\000\133" "\000\000\000\134" - /* 0x5d */ "\000\000\000\135" "\000\000\000\136" "\000\000\000\137" - /* 0x60 */ "\000\000\000\140" "\000\000\000\141" "\000\000\000\142" - /* 0x63 */ "\000\000\000\143" "\000\000\000\144" "\000\000\000\145" - /* 0x66 */ "\000\000\000\146" "\000\000\000\147" "\000\000\000\150" - /* 0x69 */ "\000\000\000\151" "\000\000\000\152" "\000\000\000\153" - /* 0x6c */ "\000\000\000\154" "\000\000\000\155" "\000\000\000\156" - /* 0x6f */ "\000\000\000\157" "\000\000\000\160" "\000\000\000\161" - /* 0x72 */ "\000\000\000\162" "\000\000\000\163" "\000\000\000\164" - /* 0x75 */ "\000\000\000\165" "\000\000\000\166" "\000\000\000\167" - /* 0x78 */ "\000\000\000\170" "\000\000\000\171" "\000\000\000\172" - /* 0x7b */ "\000\000\000\173" "\000\000\000\174" "\000\000\000\175" - /* 0x7e */ "\000\000\000\176" "\000\000\000\177" "\000\000\000\200" - /* 0x81 */ "\000\000\000\201" "\000\000\000\202" "\000\000\000\203" - /* 0x84 */ "\000\000\000\204" "\000\000\000\205" "\000\000\000\206" - /* 0x87 */ "\000\000\000\207" "\000\000\000\210" "\000\000\000\211" - /* 0x8a */ "\000\000\000\212" "\000\000\000\213" "\000\000\000\214" - /* 0x8d */ "\000\000\000\215" "\000\000\000\216" "\000\000\000\217" - /* 0x90 */ "\000\000\000\220" "\000\000\000\221" "\000\000\000\222" - /* 0x93 */ "\000\000\000\223" "\000\000\000\224" "\000\000\000\225" - /* 0x96 */ "\000\000\000\226" "\000\000\000\227" "\000\000\000\230" - /* 0x99 */ "\000\000\000\231" "\000\000\000\232" "\000\000\000\233" - /* 0x9c */ "\000\000\000\234" "\000\000\000\235" "\000\000\000\236" - /* 0x9f */ "\000\000\000\237" "\000\000\000\240" "\000\000\000\241" - /* 0xa2 */ "\000\000\000\242" "\000\000\000\243" "\000\000\000\244" - /* 0xa5 */ "\000\000\000\245" "\000\000\000\246" "\000\000\000\247" - /* 0xa8 */ "\000\000\000\250" "\000\000\000\251" "\000\000\000\252" - /* 0xab */ "\000\000\000\253" "\000\000\000\254" "\000\000\000\255" - /* 0xae */ "\000\000\000\256" "\000\000\000\257" "\000\000\000\260" - /* 0xb1 */ "\000\000\000\261" "\000\000\000\262" "\000\000\000\263" - /* 0xb4 */ "\000\000\000\264" "\000\000\000\265" "\000\000\000\266" - /* 0xb7 */ "\000\000\000\267" "\000\000\000\270" "\000\000\000\271" - /* 0xba */ "\000\000\000\272" "\000\000\000\273" "\000\000\000\274" - /* 0xbd */ "\000\000\000\275" "\000\000\000\276" "\000\000\000\277" - /* 0xc0 */ "\000\000\000\300" "\000\000\000\301" "\000\000\000\302" - /* 0xc3 */ "\000\000\000\303" "\000\000\000\304" "\000\000\000\305" - /* 0xc6 */ "\000\000\000\306" "\000\000\000\307" "\000\000\000\310" - /* 0xc9 */ "\000\000\000\311" "\000\000\000\312" "\000\000\000\313" - /* 0xcc */ "\000\000\000\314" "\000\000\000\315" "\000\000\000\316" - /* 0xcf */ "\000\000\000\317" "\000\000\000\320" "\000\000\000\321" - /* 0xd2 */ "\000\000\000\322" "\000\000\000\323" "\000\000\000\324" - /* 0xd5 */ "\000\000\000\325" "\000\000\000\326" "\000\000\000\327" - /* 0xd8 */ "\000\000\000\330" "\000\000\000\331" "\000\000\000\332" - /* 0xdb */ "\000\000\000\333" "\000\000\000\334" "\000\000\000\335" - /* 0xde */ "\000\000\000\336" "\000\000\000\337" "\000\000\000\340" - /* 0xe1 */ "\000\000\000\341" "\000\000\000\342" "\000\000\000\343" - /* 0xe4 */ "\000\000\000\344" "\000\000\000\345" "\000\000\000\346" - /* 0xe7 */ "\000\000\000\347" "\000\000\000\350" "\000\000\000\351" - /* 0xea */ "\000\000\000\352" "\000\000\000\353" "\000\000\000\354" - /* 0xed */ "\000\000\000\355" "\000\000\000\356" "\000\000\000\357" - /* 0xf0 */ "\000\000\000\360" "\000\000\000\361" "\000\000\000\362" - /* 0xf3 */ "\000\000\000\363" "\000\000\000\364" "\000\000\000\365" - /* 0xf6 */ "\000\000\000\366" "\000\000\000\367" "\000\000\000\370" - /* 0xf9 */ "\000\000\000\371" "\000\000\000\372" "\000\000\000\373" - /* 0xfc */ "\000\000\000\374" "\000\000\000\375" "\000\000\000\376" - /* 0xff */ "\000\000\000\377" -; -#else -#error "BYTE_ORDER" BYTE_ORDER " not handled." -#endif +const u_int32_t _nl_C_LC_CTYPE_toupper[384] = +{ + /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xffffffff, + /* 0x00 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + /* 0x08 */ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + /* 0x10 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + /* 0x18 */ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + /* 0x20 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + /* 0x28 */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + /* 0x30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + /* 0x38 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + /* 0x40 */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + /* 0x48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + /* 0x50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + /* 0x58 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + /* 0x60 */ 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + /* 0x68 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + /* 0x70 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + /* 0x78 */ 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; +const u_int32_t _nl_C_LC_CTYPE_tolower[384] = +{ + /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xffffffff, + /* 0x00 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + /* 0x08 */ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + /* 0x10 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + /* 0x18 */ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + /* 0x20 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + /* 0x28 */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + /* 0x30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + /* 0x38 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + /* 0x40 */ 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + /* 0x48 */ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + /* 0x50 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + /* 0x58 */ 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + /* 0x60 */ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + /* 0x68 */ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + /* 0x70 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + /* 0x78 */ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; +const u_int32_t _nl_C_LC_CTYPE_names[256] = +{ + /* 0x00 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + /* 0x08 */ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + /* 0x10 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + /* 0x18 */ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + /* 0x20 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + /* 0x28 */ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + /* 0x30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + /* 0x38 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + /* 0x40 */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + /* 0x48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + /* 0x50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + /* 0x58 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + /* 0x60 */ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + /* 0x68 */ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + /* 0x70 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + /* 0x78 */ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + /* 0x80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /* 0x88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + /* 0x90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + /* 0x98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + /* 0xa0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + /* 0xa8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + /* 0xb0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + /* 0xb8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + /* 0xc0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + /* 0xc8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + /* 0xd0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + /* 0xd8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + /* 0xe0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + /* 0xe8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + /* 0xf0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + /* 0xf8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff +}; const char _nl_C_LC_CTYPE_width[256] = -/* 0x00 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x10 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x20 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x30 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x40 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x50 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x60 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x70 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x80 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0x90 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0xa0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0xb0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0xc0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0xd0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0xe0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" -/* 0xf0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x00 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x10 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x20 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x30 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x40 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x50 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x60 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x70 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x80 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0x90 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0xa0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0xb0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0xc0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0xd0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0xe0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" + /* 0xf0 */ "\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" ; const struct locale_data _nl_C_LC_CTYPE = @@ -904,14 +340,14 @@ const struct locale_data _nl_C_LC_CTYPE = #if BYTE_ORDER == LITTLE_ENDIAN { string: NULL }, { string: NULL }, #endif - { string: _nl_C_LC_CTYPE_toupper }, - { string: _nl_C_LC_CTYPE_tolower }, + { string: (const char *) _nl_C_LC_CTYPE_toupper }, + { string: (const char *) _nl_C_LC_CTYPE_tolower }, { string: NULL }, #if BYTE_ORDER == BIG_ENDIAN { string: NULL }, #endif { string: _nl_C_LC_CTYPE_class32 }, - { string: _nl_C_LC_CTYPE_names }, + { string: (const char *) _nl_C_LC_CTYPE_names }, #if BYTE_ORDER == BIG_ENDIAN { string: NULL }, #endif diff --git a/locale/Makefile b/locale/Makefile index c7d00cfc38..fd7425e71b 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -23,6 +23,7 @@ subdir := locale headers = locale.h langinfo.h distribute = localeinfo.h categories.def iso-4217.def weight.h \ + strlen-hash.h \ $(addprefix programs/, \ $(localedef-modules:=.c) $(locale-modules:=.c) \ $(lib-modules:=.c) config.h simple-hash.h \ @@ -45,6 +46,7 @@ vpath %.gperf programs localedef-modules := $(categories:%=ld-%) charmap charset linereader \ locfile stringtrans +locale-modules := locale-spec lib-modules := simple-hash xmalloc xstrdup diff --git a/locale/categories.def b/locale/categories.def index d3caef2265..4caef24087 100644 --- a/locale/categories.def +++ b/locale/categories.def @@ -43,15 +43,27 @@ DEFINE_CATEGORY ( LC_COLLATE, "LC_COLLATE", ( - DEFINE_ELEMENT (_NL_COLLATE_NRULES, "collate-nrules", std, word) - DEFINE_ELEMENT (_NL_COLLATE_RULES, "collate-rules", std, string) - DEFINE_ELEMENT (_NL_COLLATE_HASH_SIZE, "collate-hash-size", std, word) - DEFINE_ELEMENT (_NL_COLLATE_HASH_LAYERS, "collate-hash-layers", std, word) - DEFINE_ELEMENT (_NL_COLLATE_TABLE_EB, "collate-table-eb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_TABLE_EL, "collate-table-el", std, string) - DEFINE_ELEMENT (_NL_COLLATE_UNDEFINED, "collate-undefined", std, word) - DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EB, "collate-extra-eb", std, string) - DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EL, "collate-extra-el", std, string) + DEFINE_ELEMENT (_NL_COLLATE_NRULES, "collate-nrules", std, word) + DEFINE_ELEMENT (_NL_COLLATE_RULES, "collate-rules", std, string) + DEFINE_ELEMENT (_NL_COLLATE_HASH_SIZE, "collate-hash-size", std, word) + DEFINE_ELEMENT (_NL_COLLATE_HASH_LAYERS, "collate-hash-layers", std, word) + DEFINE_ELEMENT (_NL_COLLATE_TABLE_EB, "collate-table-eb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_TABLE_EL, "collate-table-el", std, string) + DEFINE_ELEMENT (_NL_COLLATE_UNDEFINED, "collate-undefined", std, word) + DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EB, "collate-extra-eb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_EXTRA_EL, "collate-extra-el", std, string) + DEFINE_ELEMENT (_NL_COLLATE_ELEM_HASH_SIZE, "collate-elem-hash-size", std, word) + DEFINE_ELEMENT (_NL_COLLATE_ELEM_HASH_EB, "collate-elem-hash-eb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_ELEM_HASH_EL, "collate-elem-hash-el", std, string) + DEFINE_ELEMENT (_NL_COLLATE_ELEM_STR_POOL, "collate-elem-str-pool", std, string) + DEFINE_ELEMENT (_NL_COLLATE_ELEM_VAL_EB, "collate-elem-val-eb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_ELEM_VAL_EL, "collate-elem-val-el", std, string) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_SIZE, "collate-symb-hash-size", std, word) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_EB, "collate-symb-hash-eb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_HASH_EL, "collate-symb-hash-el", std, string) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_STR_POOL, "collate-symb-str-pool", std, string) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_CLASS_EB, "collate-symb-class-eb", std, string) + DEFINE_ELEMENT (_NL_COLLATE_SYMB_CLASS_EL, "collate-symb-class-el", std, string) ), _nl_postload_collate, collate_input, NULL, NULL) @@ -62,19 +74,20 @@ DEFINE_CATEGORY ( LC_CTYPE, "LC_CTYPE", ( - DEFINE_ELEMENT (_NL_CTYPE_CLASS, "ctype-class", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EB, "ctype-toupper-eb", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EB, "ctype-tolower-eb", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EL, "ctype-toupper-el", std, string) - DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EL, "ctype-tolower-el", std, string) - DEFINE_ELEMENT (_NL_CTYPE_NAMES_EB, "ctype-names-eb", std, string) - DEFINE_ELEMENT (_NL_CTYPE_NAMES_EL, "ctype-names-eb", std, string) - DEFINE_ELEMENT (_NL_CTYPE_HASH_SIZE, "ctype-hash-size", std, word) - DEFINE_ELEMENT (_NL_CTYPE_HASH_LAYERS, "ctype-hash-layers", std, word) - DEFINE_ELEMENT (_NL_CTYPE_CLASS_NAMES, "ctype-class-names", std, string) - DEFINE_ELEMENT (_NL_CTYPE_MAP_NAMES, "ctype-map-names", std, string) - DEFINE_ELEMENT (_NL_CTYPE_WIDTH, "ctype-width", std, bytearray) - DEFINE_ELEMENT (_NL_CTYPE_MB_CUR_MAX, "ctype-mb-cur-max", std, word) + DEFINE_ELEMENT (_NL_CTYPE_CLASS, "ctype-class", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EB, "ctype-toupper-eb", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EB, "ctype-tolower-eb", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TOUPPER_EL, "ctype-toupper-el", std, string) + DEFINE_ELEMENT (_NL_CTYPE_TOLOWER_EL, "ctype-tolower-el", std, string) + DEFINE_ELEMENT (_NL_CTYPE_NAMES_EB, "ctype-names-eb", std, string) + DEFINE_ELEMENT (_NL_CTYPE_NAMES_EL, "ctype-names-eb", std, string) + DEFINE_ELEMENT (_NL_CTYPE_HASH_SIZE, "ctype-hash-size", std, word) + DEFINE_ELEMENT (_NL_CTYPE_HASH_LAYERS, "ctype-hash-layers", std, word) + DEFINE_ELEMENT (_NL_CTYPE_CLASS_NAMES, "ctype-class-names", std, string) + DEFINE_ELEMENT (_NL_CTYPE_MAP_NAMES, "ctype-map-names", std, string) + DEFINE_ELEMENT (_NL_CTYPE_WIDTH, "ctype-width", std, bytearray) + DEFINE_ELEMENT (_NL_CTYPE_MB_CUR_MAX, "ctype-mb-cur-max", std, word) + DEFINE_ELEMENT (_NL_CTYPE_CODESET_NAME, "ctype-codeset-name", std, string) ), _nl_postload_ctype, ctype_input, ctype_check, ctype_output) diff --git a/locale/langinfo.h b/locale/langinfo.h index 4f0a58ff95..90aee3d745 100644 --- a/locale/langinfo.h +++ b/locale/langinfo.h @@ -115,6 +115,18 @@ typedef enum _NL_COLLATE_UNDEFINED, _NL_COLLATE_EXTRA_EB, _NL_COLLATE_EXTRA_EL, + _NL_COLLATE_ELEM_HASH_SIZE, + _NL_COLLATE_ELEM_HASH_EB, + _NL_COLLATE_ELEM_HASH_EL, + _NL_COLLATE_ELEM_STR_POOL, + _NL_COLLATE_ELEM_VAL_EB, + _NL_COLLATE_ELEM_VAL_EL, + _NL_COLLATE_SYMB_HASH_SIZE, + _NL_COLLATE_SYMB_HASH_EB, + _NL_COLLATE_SYMB_HASH_EL, + _NL_COLLATE_SYMB_STR_POOL, + _NL_COLLATE_SYMB_CLASS_EB, + _NL_COLLATE_SYMB_CLASS_EL, _NL_NUM_LC_COLLATE, /* LC_CTYPE category: character classification. @@ -181,7 +193,7 @@ typedef enum The string returned will not change until `setlocale' is called; it is usually in read-only memory and cannot be modified. */ -extern char *nl_langinfo __P ((nl_item item)); +extern char *nl_langinfo __P ((nl_item __item)); __END_DECLS diff --git a/locale/lc-collate.c b/locale/lc-collate.c index 23643b29c8..aefdaa8b0e 100644 --- a/locale/lc-collate.c +++ b/locale/lc-collate.c @@ -20,12 +20,28 @@ Boston, MA 02111-1307, USA. */ #include "localeinfo.h" #include + +extern const u_int32_t _nl_C_LC_COLLATE_symbol_hash[]; +extern const char _nl_C_LC_COLLATE_symbol_strings[]; +extern const u_int32_t _nl_C_LC_COLLATE_symbol_classes[]; + + _NL_CURRENT_DEFINE (LC_COLLATE); -const u_int32_t *__collate_table; -const u_int32_t *__collate_extra; +const u_int32_t *__collate_table = NULL; +const u_int32_t *__collate_extra = NULL; + +const u_int32_t *__collate_element_hash = NULL; +const char *__collate_element_strings = NULL; +const wchar_t *__collate_element_values = NULL; +const u_int32_t *__collate_symbol_hash = _nl_C_LC_COLLATE_symbol_hash; +const char *__collate_symbol_strings = _nl_C_LC_COLLATE_symbol_strings; +const u_int32_t *__collate_symbol_classes = _nl_C_LC_COLLATE_symbol_classes; + +/* We are called after loading LC_CTYPE data to load it into + the variables used by the collation functions and regex. */ void _nl_postload_collate (void) { @@ -44,4 +60,12 @@ _nl_postload_collate (void) __collate_table = current (bo (TABLE)); __collate_extra = current (bo (EXTRA)); + + __collate_element_hash = current (bo (ELEM_HASH)); + __collate_element_strings = (const char *) current (ELEM_STR_POOL); + __collate_element_values = (const wchar_t *) current (bo (ELEM_VAL)); + + __collate_symbol_hash = current (bo (SYMB_HASH)); + __collate_symbol_strings = (const char *) current (SYMB_STR_POOL); + __collate_symbol_classes = current (bo (SYMB_CLASS)); } diff --git a/locale/loadlocale.c b/locale/loadlocale.c index 464f8ba33f..fa7320a49a 100644 --- a/locale/loadlocale.c +++ b/locale/loadlocale.c @@ -181,7 +181,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) if (W (filedata->nstrings) < _nl_category_num_items[category] || (sizeof *filedata + W (filedata->nstrings) * sizeof (unsigned int) - >= st.st_size)) + >= (unsigned int) st.st_size)) { /* Insufficient data. */ errno = EINVAL; diff --git a/locale/localeinfo.h b/locale/localeinfo.h index d24a9da485..7a035c8739 100644 --- a/locale/localeinfo.h +++ b/locale/localeinfo.h @@ -44,6 +44,7 @@ struct locale_data unsigned int nstrings; /* Number of strings below. */ union locale_data_value { + const wchar_t *wstr; const char *string; unsigned int word; } @@ -119,5 +120,11 @@ extern void _nl_free_locale (const struct locale_data *); /* Global variables for LC_COLLATE category data. */ extern const u_int32_t *__collate_table; extern const u_int32_t *__collate_extra; +extern const u_int32_t *__collate_element_hash; +extern const char *__collate_element_strings; +extern const wchar_t *__collate_element_values; +extern const u_int32_t *__collate_symbol_hash; +extern const char *__collate_symbol_strings; +extern const u_int32_t *__collate_symbol_classes; #endif /* localeinfo.h */ diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 4bdf0b2256..77e946535d 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -1,6 +1,6 @@ /* Copyright (C) 1995, 1996 Free Software Foundation, Inc. This file is part of the GNU C Library. -Contributed by Ulrich Drepper, . +Contributed by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA. */ #include "locales.h" #include "simple-hash.h" #include "stringtrans.h" +#include "strlen-hash.h" /* Uncomment the following line in the production version. */ /* #define NDEBUG 1 */ @@ -83,7 +84,7 @@ typedef struct element_t } element_t; -/* The real definition of the struct for the LC_CTYPE locale. */ +/* The real definition of the struct for the LC_COLLATE locale. */ struct locale_collate_t { /* Collate symbol table. Simple mapping to number. */ @@ -275,15 +276,13 @@ collate_finish (struct localedef_t *locale, struct charset_t *charset) collate->undefined_len = 2; /* For the name: 1 x wchar_t + L'\0'. */ for (cnt = 0; cnt < collate->nrules; ++cnt) collate->undefined_len += 1 + collate->undefined.ordering[cnt]; - - /* Collating symbols are not used anymore. */ - (void) delete_hash (&collate->symbols); } void -collate_output (struct localedef_t *locale, const char *output_path) +collate_output (struct localedef_t *locale, struct charset_t *charset, + const char *output_path) { struct locale_collate_t *collate = locale->categories[LC_COLLATE].collate; u_int32_t table_size, table_best, level_best, sum_best; @@ -296,10 +295,29 @@ collate_output (struct localedef_t *locale, const char *output_path) struct locale_file data; u_int32_t idx[nelems]; struct obstack non_simple; + struct obstack string_pool; size_t cnt, entry_size; u_int32_t undefined_offset = UINT_MAX; u_int32_t *table, *extra, *table2, *extra2; size_t extra_len; + u_int32_t element_hash_tab_size; + u_int32_t *element_hash_tab; + u_int32_t *element_hash_tab_ob; + u_int32_t element_string_pool_size; + char *element_string_pool; + u_int32_t element_value_size; + wchar_t *element_value; + wchar_t *element_value_ob; + u_int32_t symbols_hash_tab_size; + u_int32_t *symbols_hash_tab; + u_int32_t *symbols_hash_tab_ob; + u_int32_t symbols_string_pool_size; + char *symbols_string_pool; + u_int32_t symbols_class_size; + u_int32_t *symbols_class; + u_int32_t *symbols_class_ob; + hash_table *hash_tab; + unsigned int dummy_weights[collate->nrules + 1]; sum_best = UINT_MAX; table_best = 0xffff; @@ -342,6 +360,7 @@ Computing table size for collation information might take a while..."), fputs (_(" done\n"), stderr); obstack_init (&non_simple); + obstack_init (&string_pool); data.magic = LIMAGIC (LC_COLLATE); data.n = nelems; @@ -608,6 +627,258 @@ Computing table size for collation information might take a while..."), for (cnt = 0; cnt < extra_len / sizeof (u_int32_t); ++cnt) extra2[cnt] = SWAPU32 (extra2[cnt]); + /* We need a simple hashing table to get a collation-element->chars + mapping. We again use internal hasing using a secondary hashing + function. + + Each string has an associate hashing value V, computed by a + fixed function. To locate the string we use open addressing with + double hashing. The first index will be V % M, where M is the + size of the hashing table. If no entry is found, iterating with + a second, independent hashing function takes place. This second + value will be 1 + V % (M - 2). The approximate number of probes + will be + + for unsuccessful search: (1 - N / M) ^ -1 + for successful search: - (N / M) ^ -1 * ln (1 - N / M) + + where N is the number of keys. + + If we now choose M to be the next prime bigger than 4 / 3 * N, + we get the values 4 and 1.85 resp. Because unsuccesful searches + are unlikely this is a good value. Formulas: [Knuth, The Art of + Computer Programming, Volume 3, Sorting and Searching, 1973, + Addison Wesley] */ + if (collate->elements.filled == 0) + { + /* We don't need any element table since there are no collating + elements. */ + element_hash_tab_size = 0; + element_hash_tab = NULL; + element_hash_tab_ob = NULL; + element_string_pool_size = 0; + element_string_pool = NULL; + element_value_size = 0; + element_value = NULL; + element_value_ob = NULL; + } + else + { + void *ptr; /* Running pointer. */ + const char *key; /* Key for current bucket. */ + size_t keylen; /* Length of key data. */ + const element_t *data; /* Data, i.e., the character sequence. */ + + element_hash_tab_size = next_prime ((collate->elements.filled * 4) / 3); + if (element_hash_tab_size < 7) + /* We need a minimum to make the following code work. */ + element_hash_tab_size = 7; + + element_hash_tab = obstack_alloc (&non_simple, (2 * element_hash_tab_size + * sizeof (u_int32_t))); + memset (element_hash_tab, '\377', (2 * element_hash_tab_size + * sizeof (u_int32_t))); + + ptr = NULL; + while (iterate_table (&collate->elements, &ptr, (const void **) &key, + &keylen, (void **) &data) == 0) + { + size_t hash_val = hash_string (key, keylen); + size_t idx = hash_val % element_hash_tab_size; + + if (element_hash_tab[2 * idx] != (~((u_int32_t) 0))) + { + /* We need the second hashing function. */ + size_t c = 1 + (hash_val % (element_hash_tab_size - 2)); + + do + if (idx >= element_hash_tab_size - c) + idx -= element_hash_tab_size - c; + else + idx += c; + while (element_hash_tab[2 * idx] != (~((u_int32_t) 0))); + } + + element_hash_tab[2 * idx] = obstack_object_size (&non_simple); + element_hash_tab[2 * idx + 1] = (obstack_object_size (&string_pool) + / sizeof (wchar_t)); + + obstack_grow0 (&non_simple, key, keylen); + obstack_grow (&string_pool, data->name, + (wcslen (data->name) + 1) * sizeof (wchar_t)); + } + + if (obstack_object_size (&non_simple) % 4 != 0) + obstack_blank (&non_simple, + 4 - (obstack_object_size (&non_simple) % 4)); + element_string_pool_size = obstack_object_size (&non_simple); + element_string_pool = obstack_finish (&non_simple); + + element_value_size = obstack_object_size (&string_pool); + element_value = obstack_finish (&string_pool); + + /* Create the tables for the other byte order. */ + element_hash_tab_ob = obstack_alloc (&non_simple, + (2 * element_hash_tab_size + * sizeof (u_int32_t))); + for (cnt = 0; cnt < 2 * element_hash_tab_size; ++cnt) + element_hash_tab_ob[cnt] = SWAPU32 (element_hash_tab[cnt]); + + element_value_ob = obstack_alloc (&string_pool, element_value_size); + if (sizeof (wchar_t) != 4) + { + fputs ("sizeof (wchar_t) != 4 currently not handled", stderr); + abort (); + } + for (cnt = 0; cnt < element_value_size / 4; ++cnt) + element_value_ob[cnt] = SWAPU32 (element_value[cnt]); + } + + /* Store collation elements as map to collation class. There are + three kinds of symbols: + - simple characters + - collation elements + - collation symbols + We need to make a table which lets the user to access the primary + weight based on the symbol string. */ + symbols_hash_tab_size = next_prime ((4 * (charset->char_table.filled + + collate->elements.filled + + collate->symbols.filled)) / 3); + symbols_hash_tab = obstack_alloc (&non_simple, (2 * symbols_hash_tab_size + * sizeof (u_int32_t))); + memset (symbols_hash_tab, '\377', (2 * symbols_hash_tab_size + * sizeof (u_int32_t))); + + /* Now fill the array. First the symbols from the character set, + then the collation elements and last the collation symbols. */ + hash_tab = &charset->char_table; + while (1) + { + void *ptr; /* Running pointer. */ + const char *key; /* Key for current bucket. */ + size_t keylen; /* Length of key data. */ + void *data; /* Data. */ + + ptr = NULL; + while (iterate_table (hash_tab, &ptr, (const void **) &key, + &keylen, (void **) &data) == 0) + { + size_t hash_val; + size_t idx; + u_int32_t word; + unsigned int *weights; + + if (hash_tab == &charset->char_table + || hash_tab == &collate->elements) + { + element_t *lastp, *firstp; + wchar_t dummy_name[2]; + const wchar_t *name; + size_t name_len; + + if (hash_tab == &charset->char_table) + { + dummy_name[0] = (wchar_t) ((unsigned long int) data); + dummy_name[1] = L'\0'; + name = dummy_name; + name_len = sizeof (wchar_t); + } + else + { + element_t *elemp = (element_t *) data; + name = elemp->name; + name_len = wcslen (name) * sizeof (wchar_t); + } + + /* First check whether this character is used at all. */ + if (find_entry (&collate->result, name, name_len, + (void *) &firstp) < 0) + /* The symbol is not directly mentioned in the collation. + I.e., we use the value for UNDEFINED. */ + lastp = &collate->undefined; + else + { + /* The entry for the simple character is always found at + the end. */ + lastp = firstp; + while (lastp->next != NULL && wcscmp (name, lastp->name)) + lastp = lastp->next; + } + + weights = lastp->ordering; + } + else + { + dummy_weights[0] = 1; + dummy_weights[collate->nrules] + = (unsigned int) ((unsigned long int) data); + + weights = dummy_weights; + } + + /* In LASTP->ordering we now have the collation class. + Determine the place in the hashing table next. */ + hash_val = hash_string (key, keylen); + idx = hash_val % symbols_hash_tab_size; + + if (symbols_hash_tab[2 * idx] != (~((u_int32_t) 0))) + { + /* We need the second hashing function. */ + size_t c = 1 + (hash_val % (symbols_hash_tab_size - 2)); + + do + if (idx >= symbols_hash_tab_size - c) + idx -= symbols_hash_tab_size - c; + else + idx += c; + while (symbols_hash_tab[2 * idx] != (~((u_int32_t) 0))); + } + + symbols_hash_tab[2 * idx] = obstack_object_size (&string_pool); + symbols_hash_tab[2 * idx + 1] = (obstack_object_size (&non_simple) + / sizeof (u_int32_t)); + + obstack_grow0 (&string_pool, key, keylen); + /* Adding the first weight looks complicated. We have to deal + with the kind it is stored and with the fact that original + form uses `unsigned int's while we need `u_int32_t' here. */ + word = weights[0]; + obstack_grow (&non_simple, &word, sizeof (u_int32_t)); + for (cnt = 0; cnt < weights[0]; ++cnt) + { + word = weights[collate->nrules + cnt]; + obstack_grow (&non_simple, &word, sizeof (u_int32_t)); + } + } + + if (hash_tab == &charset->char_table) + hash_tab = &collate->elements; + else if (hash_tab == &collate->elements) + hash_tab = &collate->symbols; + else + break; + } + + /* Now we have the complete tables. */ + if (obstack_object_size (&string_pool) % 4 != 0) + obstack_blank (&non_simple, 4 - (obstack_object_size (&string_pool) % 4)); + symbols_string_pool_size = obstack_object_size (&string_pool); + symbols_string_pool = obstack_finish (&string_pool); + + symbols_class_size = obstack_object_size (&non_simple); + symbols_class = obstack_finish (&non_simple); + + /* Generate tables with other byte order. */ + symbols_hash_tab_ob = obstack_alloc (&non_simple, (2 * symbols_hash_tab_size + * sizeof (u_int32_t))); + for (cnt = 0; cnt < 2 * symbols_hash_tab_size; ++cnt) + symbols_hash_tab_ob[cnt] = SWAPU32 (symbols_hash_tab[cnt]); + + symbols_class_ob = obstack_alloc (&non_simple, symbols_class_size); + for (cnt = 0; cnt < symbols_class_size / 4; ++cnt) + symbols_class_ob[cnt] = SWAPU32 (symbols_class[cnt]); + + /* Store table adresses and lengths. */ #if __BYTE_ORDER == __BIG_ENDIAN iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_TABLE_EB)].iov_base = table; @@ -642,12 +913,124 @@ Computing table size for collation information might take a while..."), iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_UNDEFINED)].iov_base = &undefined_offset; iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_UNDEFINED)].iov_len = sizeof (u_int32_t); + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_SIZE)].iov_base + = &element_hash_tab_size; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_SIZE)].iov_len + = sizeof (u_int32_t); + +#if __BYTE_ORDER == __BIG_ENDIAN + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_base + = element_hash_tab; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_len + = 2 * element_hash_tab_size * sizeof (u_int32_t); + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_base + = element_hash_tab_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_len + = 2 * element_hash_tab_size * sizeof (u_int32_t); +#else + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_base + = element_hash_tab; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EL)].iov_len + = 2 * element_hash_tab_size * sizeof (u_int32_t); + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_base + = element_hash_tab_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_HASH_EB)].iov_len + = 2 * element_hash_tab_size * sizeof (u_int32_t); +#endif + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_STR_POOL)].iov_base + = element_string_pool; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_STR_POOL)].iov_len + = element_string_pool_size; + +#if __BYTE_ORDER == __BIG_ENDIAN + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_base + = element_value; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_len + = element_value_size; + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_base + = element_value_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_len + = element_value_size; +#else + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_base + = element_value; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EL)].iov_len + = element_value_size; + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_base + = element_value_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_VAL_EB)].iov_len + = element_value_size; +#endif + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_SIZE)].iov_base + = &symbols_hash_tab_size; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_SIZE)].iov_len + = sizeof (u_int32_t); + +#if __BYTE_ORDER == __BIG_ENDIAN + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_base + = symbols_hash_tab; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_len + = 2 * symbols_hash_tab_size * sizeof (u_int32_t); + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_base + = symbols_hash_tab_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_len + = 2 * symbols_hash_tab_size * sizeof (u_int32_t); +#else + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_base + = symbols_hash_tab; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EL)].iov_len + = 2 * symbols_hash_tab_size * sizeof (u_int32_t); + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_base + = symbols_hash_tab_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_EB)].iov_len + = 2 * symbols_hash_tab_size * sizeof (u_int32_t); +#endif + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_STR_POOL)].iov_base + = symbols_string_pool; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_STR_POOL)].iov_len + = symbols_string_pool_size; + +#if __BYTE_ORDER == __BIG_ENDIAN + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EB)].iov_base + = symbols_class; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_ELEM_CLASS_EB)].iov_len + = symbols_class_size; + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_base + = symbols_class_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_len + = symbols_class_size; +#else + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_base + = symbols_class; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EL)].iov_len + = symbols_class_size; + + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EB)].iov_base + = symbols_class_ob; + iov[2 + _NL_ITEM_INDEX (_NL_COLLATE_SYMB_CLASS_EB)].iov_len + = symbols_class_size; +#endif + /* Update idx array. */ idx[0] = iov[0].iov_len + iov[1].iov_len; for (cnt = 1; cnt < nelems; ++cnt) idx[cnt] = idx[cnt - 1] + iov[1 + cnt].iov_len; write_locale_data (output_path, "LC_COLLATE", 2 + nelems, iov); + + obstack_free (&non_simple, NULL); + obstack_free (&string_pool, NULL); } @@ -729,7 +1112,7 @@ collate_element_from (struct linereader *lr, struct localedef_t *locale, if (elemp->name[0] == L'\0' || elemp->name[1] == L'\0') { - lr_error (lr, _("illegal colltion element")); + lr_error (lr, _("illegal collation element")); return; } @@ -762,8 +1145,7 @@ collate_element_from (struct linereader *lr, struct localedef_t *locale, { if (set_entry (&collate->result, elemp->name, sizeof (wchar_t), elemp) < 0) - error (EXIT_FAILURE, 0, - _("\ + error (EXIT_FAILURE, 0, _("\ error while inserting collation element into hash table")); } else @@ -1019,7 +1401,7 @@ line before ellipsis does not contain definition for character constant")); } /* Now it's time to handle the ellipsis in the previous line. We do - this only when the last line contained an definition for an + this only when the last line contained an definition for a character, the current line also defines an character, the character code for the later is bigger than the former. */ if (collate->was_ellipsis) diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c index 0ca3af584b..196f990745 100644 --- a/locale/programs/ld-ctype.c +++ b/locale/programs/ld-ctype.c @@ -387,8 +387,8 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset, { #define CTYPE_DATA(name, base, len) \ case _NL_ITEM_INDEX (name): \ - iov[2 + elem + offset].iov_base = base; \ - iov[2 + elem + offset].iov_len = len; \ + iov[2 + elem + offset].iov_base = (base); \ + iov[2 + elem + offset].iov_len = (len); \ if (elem + 1 < nelems) \ idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len; \ break @@ -443,9 +443,9 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset, = strlen (ctype->classnames[cnt]) + 1; total += iov[2 + elem + offset].iov_len; } - iov[2 + elem + offset].iov_base = (void *) ""; - iov[2 + elem + offset].iov_len = 1; - ++total; + iov[2 + elem + offset].iov_base = (void *) "\0\0\0"; + iov[2 + elem + offset].iov_len = 1 + (4 - ((total + 1) % 4)); + total += 1 + (4 - ((total + 1) % 4)); if (elem + 1 < nelems) idx[elem + 1] = idx[elem] + total; @@ -462,9 +462,9 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset, = strlen (ctype->mapnames[cnt]) + 1; total += iov[2 + elem + offset].iov_len; } - iov[2 + elem + offset].iov_base = (void *) ""; - iov[2 + elem + offset].iov_len = 1; - ++total; + iov[2 + elem + offset].iov_base = (void *) "\0\0\0"; + iov[2 + elem + offset].iov_len = 1 + (4 - ((total + 1) % 4)); + total += 1 + (4 - ((total + 1) % 4)); if (elem + 1 < nelems) idx[elem + 1] = idx[elem] + total; @@ -476,8 +476,21 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset, CTYPE_DATA (_NL_CTYPE_MB_CUR_MAX, &ctype->mb_cur_max, sizeof (u_int32_t)); - CTYPE_DATA (_NL_CTYPE_CODESET_NAME, - ctype->codeset_name, strlen (ctype->codeset_name) + 1); + case _NL_ITEM_INDEX (_NL_CTYPE_CODESET_NAME): + total = strlen (ctype->codeset_name) + 1; + if (total % 4 == 0) + iov[2 + elem + offset].iov_base = (char *) ctype->codeset_name; + else + { + iov[2 + elem + offset].iov_base = alloca ((total + 3) & ~3); + memcpy (iov[2 + elem + offset].iov_base, ctype->codeset_name, + total); + total = (total + 3) & ~3; + } + iov[2 + elem + offset].iov_len = total; + if (elem + 1 < nelems) + idx[elem + 1] = idx[elem] + iov[2 + elem + offset].iov_len; + break; default: assert (! "unknown CTYPE element"); diff --git a/locale/programs/locale-spec.c b/locale/programs/locale-spec.c index e408421656..c595524bbb 100644 --- a/locale/programs/locale-spec.c +++ b/locale/programs/locale-spec.c @@ -92,4 +92,37 @@ locale_special (const char *name, int show_category_name, putchar ('\n'); return; } + + if (strcmp (name, "collate-classes") == 0) + { + size_t nelem = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZE); + size_t cnt; + int first = 1; + + if (show_category_name) + puts ("LC_COLLATE"); + if (show_keyword_name) + fputs ("collate-classes=", stdout); + + for (cnt = 0; cnt < nelem; ++cnt) + if (__collate_symbol_hash[2 * cnt] != 0xffffffff) + { + printf ("%s<%s>", first ? "" : ",", + &__collate_symbol_strings[__collate_symbol_hash[2 * cnt]]); +#if 1 + { + size_t idx = __collate_symbol_hash[2 * cnt + 1]; + size_t cls; + + putchar ('='); + for (cls = 0; cls < __collate_symbol_classes[idx]; ++cls) + printf ("%s%d", cls == 0 ? "" : ":", + __collate_symbol_classes[idx + 1 + cls]); + } +#endif + first = 0; + } + putchar ('\n'); + return; + } } diff --git a/locale/programs/locales.h b/locale/programs/locales.h index 9fe85e9e07..95e166e3ef 100644 --- a/locale/programs/locales.h +++ b/locale/programs/locales.h @@ -122,7 +122,8 @@ void collate_startup (struct linereader *lr, struct localedef_t *locale, void collate_finish (struct localedef_t *locale, struct charset_t *charset); -void collate_output (struct localedef_t *locale, const char *output_path); +void collate_output (struct localedef_t *locale, struct charset_t *charset, + const char *output_path); void collate_element_to (struct linereader *lr, struct localedef_t *locale, struct token *code, struct charset_t *charset); diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c index 436df2e976..63ebc4b856 100644 --- a/locale/programs/locfile.c +++ b/locale/programs/locfile.c @@ -919,7 +919,7 @@ write_all_categories (struct localedef_t *locale, struct charset_t *charset, { /* Call all functions to write locale data. */ ctype_output (locale, charset, output_path); - collate_output (locale, output_path); + collate_output (locale, charset, output_path); monetary_output (locale, output_path); numeric_output (locale, output_path); time_output (locale, output_path); @@ -943,13 +943,31 @@ write_locale_data (const char *output_path, const char *category, But for LC_MESSAGES we have to take care for the translation data. This means we need to have a directory LC_MESSAGES in which we place the file under the name SYS_LC_MESSAGES. */ + sprintf (fname, "%s%s", output_path, category); if (strcmp (category, "LC_MESSAGES") == 0) - fd = -1; - else { - sprintf (fname, "%s%s", output_path, category); - fd = creat (fname, 0666); + struct stat st; + + if (stat (fname, &st) < 0) + { + if (mkdir (fname, 0777) < 0) + fd = creat (fname, 0666); + else + { + fd = -1; + errno = EISDIR; + } + } + else if (S_ISREG (st.st_mode)) + fd = creat (fname, 0666); + else + { + fd = -1; + errno = EISDIR; + } } + else + fd = creat (fname, 0666); if (fd == -1) { @@ -965,8 +983,9 @@ write_locale_data (const char *output_path, const char *category, if (fd == -1) { - error (0, save_err, _("cannot open output file for category `%s'"), - category); + error (0, save_err, _("\ +cannot open output file `%s' for category `%s'"), + fname, category); return; } } diff --git a/locale/setlocale.c b/locale/setlocale.c index a32fab330e..4a9f7854eb 100644 --- a/locale/setlocale.c +++ b/locale/setlocale.c @@ -279,7 +279,7 @@ setlocale (int category, const char *locale) while ((cp = strchr (np, '=')) != NULL) { for (cnt = 0; cnt < LC_ALL; ++cnt) - if (cp - np == _nl_category_name_sizes[cnt] + if ((size_t) (cp - np) == _nl_category_name_sizes[cnt] && memcmp (np, _nl_category_names[cnt], cp - np) == 0) break; diff --git a/locale/strlen-hash.h b/locale/strlen-hash.h new file mode 100644 index 0000000000..dba56dff21 --- /dev/null +++ b/locale/strlen-hash.h @@ -0,0 +1,51 @@ +/* strlen-hash - Implements hashing function for string with known length. +Copyright (C) 1996 Free Software Foundation, Inc. +Contributed by Ulrich Drepper , 1996. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include + +/* We assume to have `size_t' value with at least 32 bits. */ +#define HASHWORDBITS 32 + + +/* Defines the so called `hashpjw' function by P.J. Weinberger + [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, + 1986, 1987 Bell Telephone Laboratories, Inc.] */ +static size_t hash_string (const char *__str_param, size_t __len); + +static inline size_t +hash_string (const char *str_param, size_t len) +{ + size_t hval, g; + const char *end_str = str_param + len; + + /* Compute the hash value for the given string. */ + hval = len; + while (str_param != end_str) + { + hval <<= 4; + hval += (size_t) *str_param++; + g = hval & ((size_t) 0xf << (HASHWORDBITS - 4)); + if (g != 0) + { + hval ^= g >> (HASHWORDBITS - 8); + hval ^= g; + } + } + return hval; +} -- cgit 1.4.1