table.c revision 57035
1293531Sdchagin/*- 2293531Sdchagin * Copyright (c) 1993 3293531Sdchagin * The Regents of the University of California. All rights reserved. 4293531Sdchagin * 5293531Sdchagin * This code is derived from software contributed to Berkeley by 6293531Sdchagin * Paul Borman at Krystal Technologies. 7293531Sdchagin * 8293531Sdchagin * Redistribution and use in source and binary forms, with or without 9293531Sdchagin * modification, are permitted provided that the following conditions 10293531Sdchagin * are met: 11293531Sdchagin * 1. Redistributions of source code must retain the above copyright 12293531Sdchagin * notice, this list of conditions and the following disclaimer. 13293531Sdchagin * 2. Redistributions in binary form must reproduce the above copyright 14293531Sdchagin * notice, this list of conditions and the following disclaimer in the 15293531Sdchagin * documentation and/or other materials provided with the distribution. 16293531Sdchagin * 3. All advertising materials mentioning features or use of this software 17293531Sdchagin * must display the following acknowledgement: 18293531Sdchagin * This product includes software developed by the University of 19293531Sdchagin * California, Berkeley and its contributors. 20293531Sdchagin * 4. Neither the name of the University nor the names of its contributors 21293531Sdchagin * may be used to endorse or promote products derived from this software 22293531Sdchagin * without specific prior written permission. 23293531Sdchagin * 24293531Sdchagin * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25293531Sdchagin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26293531Sdchagin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27293531Sdchagin * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28293531Sdchagin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29293531Sdchagin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30293531Sdchagin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31293531Sdchagin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32293531Sdchagin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33293531Sdchagin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34293531Sdchagin * SUCH DAMAGE. 35293531Sdchagin * 36293531Sdchagin * $FreeBSD: head/lib/libc/locale/table.c 57035 2000-02-08 07:43:26Z obrien $ 37293531Sdchagin */ 38293531Sdchagin 39293531Sdchagin#if defined(LIBC_SCCS) && !defined(lint) 40293531Sdchaginstatic char sccsid[] = "@(#)table.c 8.1 (Berkeley) 6/27/93"; 41293531Sdchagin#endif /* LIBC_SCCS and not lint */ 42293531Sdchagin 43293531Sdchagin#include <ctype.h> 44293531Sdchagin#include <rune.h> 45293531Sdchagin 46293531Sdchaginextern rune_t _none_sgetrune __P((const char *, size_t, char const **)); 47293531Sdchaginextern int _none_sputrune __P((rune_t, char *, size_t, char **)); 48293531Sdchaginextern int _none_init __P((char *, char **)); 49293531Sdchagin 50293531Sdchagin_RuneLocale _DefaultRuneLocale = { 51293531Sdchagin _RUNE_MAGIC_1, 52293531Sdchagin "none", 53293531Sdchagin _none_sgetrune, 54293531Sdchagin _none_sputrune, 55293531Sdchagin 0xFFFD, 56293531Sdchagin 57293531Sdchagin { /*00*/ _CTYPE_C, 58293531Sdchagin _CTYPE_C, 59293531Sdchagin _CTYPE_C, 60293531Sdchagin _CTYPE_C, 61293531Sdchagin _CTYPE_C, 62293531Sdchagin _CTYPE_C, 63293531Sdchagin _CTYPE_C, 64293531Sdchagin _CTYPE_C, 65293531Sdchagin /*08*/ _CTYPE_C, 66293531Sdchagin _CTYPE_C|_CTYPE_S|_CTYPE_B, 67293531Sdchagin _CTYPE_C|_CTYPE_S, 68293531Sdchagin _CTYPE_C|_CTYPE_S, 69293531Sdchagin _CTYPE_C|_CTYPE_S, 70293531Sdchagin _CTYPE_C|_CTYPE_S, 71293531Sdchagin _CTYPE_C, 72293531Sdchagin _CTYPE_C, 73293531Sdchagin /*10*/ _CTYPE_C, 74293531Sdchagin _CTYPE_C, 75293531Sdchagin _CTYPE_C, 76293531Sdchagin _CTYPE_C, 77293531Sdchagin _CTYPE_C, 78293531Sdchagin _CTYPE_C, 79293531Sdchagin _CTYPE_C, 80293531Sdchagin _CTYPE_C, 81293531Sdchagin /*18*/ _CTYPE_C, 82293531Sdchagin _CTYPE_C, 83293531Sdchagin _CTYPE_C, 84293531Sdchagin _CTYPE_C, 85293531Sdchagin _CTYPE_C, 86293531Sdchagin _CTYPE_C, 87293531Sdchagin _CTYPE_C, 88293531Sdchagin _CTYPE_C, 89293531Sdchagin /*20*/ _CTYPE_S|_CTYPE_B|_CTYPE_R, 90293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 91293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 92293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 93293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 94293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 95293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 96293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 97293531Sdchagin /*28*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 98293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 99293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 100293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 101293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 102293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 103293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 104293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 105293531Sdchagin /*30*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|0, 106293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|1, 107293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|2, 108293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|3, 109293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|4, 110293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|5, 111293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|6, 112293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|7, 113293531Sdchagin /*38*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|8, 114293531Sdchagin _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|9, 115293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 116293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 117293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 118293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 119293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 120293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 121293531Sdchagin /*40*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 122293531Sdchagin _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10, 123293531Sdchagin _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11, 124293531Sdchagin _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12, 125293531Sdchagin _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13, 126293531Sdchagin _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14, 127293531Sdchagin _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15, 128293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 129293531Sdchagin /*48*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 130293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 131293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 132293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 133293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 134293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 135293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 136293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 137293531Sdchagin /*50*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 138293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 139293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 140293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 141293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 142293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 143293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 144293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 145293531Sdchagin /*58*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 146293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 147293531Sdchagin _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 148293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 149293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 150293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 151293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 152293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 153293531Sdchagin /*60*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 154293531Sdchagin _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10, 155293531Sdchagin _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11, 156293531Sdchagin _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12, 157293531Sdchagin _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13, 158293531Sdchagin _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14, 159293531Sdchagin _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15, 160293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 161293531Sdchagin /*68*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 162293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 163293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 164293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 165293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 166293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 167293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 168293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 169293531Sdchagin /*70*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 170293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 171293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 172293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 173293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 174293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 175293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 176293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 177293531Sdchagin /*78*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 178293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 179293531Sdchagin _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 180293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 181293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 182293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 183293531Sdchagin _CTYPE_P|_CTYPE_R|_CTYPE_G, 184293531Sdchagin _CTYPE_C, 185293531Sdchagin }, 186293531Sdchagin { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 187293531Sdchagin 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 188293531Sdchagin 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 189293531Sdchagin 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 190293531Sdchagin 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 191293531Sdchagin 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 192293531Sdchagin 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 193293531Sdchagin 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 194293531Sdchagin 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 195293531Sdchagin 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 196293531Sdchagin 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 197293531Sdchagin 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 198293531Sdchagin 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 199293531Sdchagin 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 200293531Sdchagin 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 201293531Sdchagin 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 202293531Sdchagin 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 203293531Sdchagin 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 204293531Sdchagin 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 205293531Sdchagin 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 206293531Sdchagin 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 207293531Sdchagin 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 208293531Sdchagin 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 209293531Sdchagin 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 210293531Sdchagin 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 211293531Sdchagin 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 212293531Sdchagin 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 213293531Sdchagin 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 214293531Sdchagin 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 215293531Sdchagin 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 216293531Sdchagin 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 217293531Sdchagin 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 218293531Sdchagin }, 219293531Sdchagin { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 220293531Sdchagin 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 221293531Sdchagin 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 222293531Sdchagin 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 223293531Sdchagin 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 224293531Sdchagin 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 225293531Sdchagin 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 226293531Sdchagin 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 227293531Sdchagin 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 228293531Sdchagin 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 229293531Sdchagin 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 230293531Sdchagin 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 231293531Sdchagin 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 232293531Sdchagin 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 233293531Sdchagin 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 234293531Sdchagin 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 235293531Sdchagin 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 236293531Sdchagin 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 237293531Sdchagin 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 238293531Sdchagin 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 239293531Sdchagin 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 240293531Sdchagin 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 241293531Sdchagin 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 242293531Sdchagin 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 243293531Sdchagin 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 244293531Sdchagin 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 245293531Sdchagin 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 246293531Sdchagin 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 247293531Sdchagin 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 248293531Sdchagin 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 249293531Sdchagin 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 250293531Sdchagin 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 251293531Sdchagin }, 252293531Sdchagin}; 253293531Sdchagin 254293531Sdchagin_RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale; 255293531Sdchagin 256293531Sdchaginint __mb_cur_max = 1; 257293531Sdchagin 258293531Sdchaginchar *_PathLocale; 259293531Sdchagin