table.c revision 92986
163899Sarchie/*-
263899Sarchie * Copyright (c) 1993
363899Sarchie *	The Regents of the University of California.  All rights reserved.
463899Sarchie *
563899Sarchie * This code is derived from software contributed to Berkeley by
663899Sarchie * Paul Borman at Krystal Technologies.
763899Sarchie *
863899Sarchie * Redistribution and use in source and binary forms, with or without
963899Sarchie * modification, are permitted provided that the following conditions
1063899Sarchie * are met:
1163899Sarchie * 1. Redistributions of source code must retain the above copyright
1263899Sarchie *    notice, this list of conditions and the following disclaimer.
1363899Sarchie * 2. Redistributions in binary form must reproduce the above copyright
1463899Sarchie *    notice, this list of conditions and the following disclaimer in the
1563899Sarchie *    documentation and/or other materials provided with the distribution.
1663899Sarchie * 3. All advertising materials mentioning features or use of this software
1763899Sarchie *    must display the following acknowledgement:
1863899Sarchie *	This product includes software developed by the University of
1963899Sarchie *	California, Berkeley and its contributors.
2063899Sarchie * 4. Neither the name of the University nor the names of its contributors
2163899Sarchie *    may be used to endorse or promote products derived from this software
2263899Sarchie *    without specific prior written permission.
2363899Sarchie *
2463899Sarchie * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2563899Sarchie * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2663899Sarchie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2763899Sarchie * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2863899Sarchie * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2963899Sarchie * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3063899Sarchie * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3163899Sarchie * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3263899Sarchie * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3363899Sarchie * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3463899Sarchie * SUCH DAMAGE.
3563899Sarchie */
3663899Sarchie
3763899Sarchie#if defined(LIBC_SCCS) && !defined(lint)
3863899Sarchiestatic char sccsid[] = "@(#)table.c	8.1 (Berkeley) 6/27/93";
3963899Sarchie#endif /* LIBC_SCCS and not lint */
4063899Sarchie#include <sys/cdefs.h>
4163899Sarchie__FBSDID("$FreeBSD: head/lib/libc/locale/table.c 92986 2002-03-22 21:53:29Z obrien $");
4263899Sarchie
4363899Sarchie#include <ctype.h>
4463899Sarchie#include <rune.h>
4563899Sarchie
4663899Sarchieextern rune_t	_none_sgetrune(const char *, size_t, char const **);
4763899Sarchieextern int	_none_sputrune(rune_t, char *, size_t, char **);
4863899Sarchieextern int	_none_init(char *, char **);
4963899Sarchie
5063899Sarchie_RuneLocale _DefaultRuneLocale = {
5163899Sarchie    _RUNE_MAGIC_1,
5263899Sarchie    "NONE",
5363899Sarchie    _none_sgetrune,
5463899Sarchie    _none_sputrune,
5563899Sarchie    0xFFFD,
5663899Sarchie
5763899Sarchie    {	/*00*/	_CTYPE_C,
5863899Sarchie		_CTYPE_C,
5963899Sarchie		_CTYPE_C,
6063899Sarchie		_CTYPE_C,
6163899Sarchie		_CTYPE_C,
6263899Sarchie		_CTYPE_C,
6363899Sarchie		_CTYPE_C,
6463899Sarchie		_CTYPE_C,
6563899Sarchie	/*08*/	_CTYPE_C,
6684195Sdillon		_CTYPE_C|_CTYPE_S|_CTYPE_B,
6784195Sdillon		_CTYPE_C|_CTYPE_S,
6884195Sdillon		_CTYPE_C|_CTYPE_S,
6963899Sarchie		_CTYPE_C|_CTYPE_S,
7063899Sarchie		_CTYPE_C|_CTYPE_S,
7163899Sarchie		_CTYPE_C,
7263899Sarchie		_CTYPE_C,
7399207Sbrian	/*10*/	_CTYPE_C,
7463899Sarchie		_CTYPE_C,
7563899Sarchie		_CTYPE_C,
7699207Sbrian		_CTYPE_C,
7799207Sbrian		_CTYPE_C,
7863899Sarchie		_CTYPE_C,
7963899Sarchie		_CTYPE_C,
8063899Sarchie		_CTYPE_C,
8163899Sarchie	/*18*/	_CTYPE_C,
8263899Sarchie		_CTYPE_C,
8399207Sbrian		_CTYPE_C,
8463899Sarchie		_CTYPE_C,
8563899Sarchie		_CTYPE_C,
8663899Sarchie		_CTYPE_C,
8763899Sarchie		_CTYPE_C,
8863899Sarchie		_CTYPE_C,
8963899Sarchie	/*20*/	_CTYPE_S|_CTYPE_B|_CTYPE_R,
9063899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9163899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9263899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9363899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9463899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9563899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9663899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9763899Sarchie	/*28*/	_CTYPE_P|_CTYPE_R|_CTYPE_G,
9899207Sbrian		_CTYPE_P|_CTYPE_R|_CTYPE_G,
9963899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
10063899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
101145921Sglebius		_CTYPE_P|_CTYPE_R|_CTYPE_G,
102145921Sglebius		_CTYPE_P|_CTYPE_R|_CTYPE_G,
103162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
104162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
105162674Spiso	/*30*/	_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|0,
106145921Sglebius		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|1,
107162674Spiso		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|2,
108145921Sglebius		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|3,
10963899Sarchie		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|4,
11063899Sarchie		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|5,
111145921Sglebius		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|6,
112145921Sglebius		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|7,
11363899Sarchie	/*38*/	_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|8,
11463899Sarchie		_CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|9,
11563899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
11663899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
11763899Sarchie		_CTYPE_P|_CTYPE_R|_CTYPE_G,
118145921Sglebius		_CTYPE_P|_CTYPE_R|_CTYPE_G,
119145932Sglebius		_CTYPE_P|_CTYPE_R|_CTYPE_G,
120145921Sglebius		_CTYPE_P|_CTYPE_R|_CTYPE_G,
121162674Spiso	/*40*/	_CTYPE_P|_CTYPE_R|_CTYPE_G,
122145921Sglebius		_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10,
12363899Sarchie		_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11,
124162674Spiso		_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12,
125145921Sglebius		_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13,
12663899Sarchie		_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14,
12799207Sbrian		_CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15,
12899207Sbrian		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
129162674Spiso	/*48*/	_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
130162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
131162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
132162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
133162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
134162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
135190841Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
136162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
137162674Spiso	/*50*/	_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
138164075Smarcus		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
139164075Smarcus		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
140164075Smarcus		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
141162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
142162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
143162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
144162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
145162674Spiso	/*58*/	_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
146162674Spiso		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
147164075Smarcus		_CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A,
148162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
149162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
150162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
151162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
152162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
153162674Spiso	/*60*/	_CTYPE_P|_CTYPE_R|_CTYPE_G,
154162674Spiso		_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10,
155162674Spiso		_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11,
156162674Spiso		_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12,
157162674Spiso		_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13,
158162674Spiso		_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14,
159162674Spiso		_CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15,
160162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
161162674Spiso	/*68*/	_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
162162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
163162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
164162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
165162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
166162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
167162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
168162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
169162674Spiso	/*70*/	_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
170162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
171162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
172162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
173162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
174162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
175162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
176162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
177162674Spiso	/*78*/	_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
178162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
179162674Spiso		_CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A,
180162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
181162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
182162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
183162674Spiso		_CTYPE_P|_CTYPE_R|_CTYPE_G,
184162674Spiso		_CTYPE_C,
185162674Spiso    },
186162674Spiso    {	0x00,	0x01,	0x02,	0x03,	0x04,	0x05,	0x06,	0x07,
187162674Spiso     	0x08,	0x09,	0x0a,	0x0b,	0x0c,	0x0d,	0x0e,	0x0f,
188162674Spiso	0x10,	0x11,	0x12,	0x13,	0x14,	0x15,	0x16,	0x17,
189162674Spiso     	0x18,	0x19,	0x1a,	0x1b,	0x1c,	0x1d,	0x1e,	0x1f,
190162674Spiso	0x20,	0x21,	0x22,	0x23,	0x24,	0x25,	0x26,	0x27,
191162674Spiso     	0x28,	0x29,	0x2a,	0x2b,	0x2c,	0x2d,	0x2e,	0x2f,
192162674Spiso	0x30,	0x31,	0x32,	0x33,	0x34,	0x35,	0x36,	0x37,
193162674Spiso     	0x38,	0x39,	0x3a,	0x3b,	0x3c,	0x3d,	0x3e,	0x3f,
194162674Spiso	0x40,	'a',	'b',	'c',	'd',	'e',	'f',	'g',
195162674Spiso     	'h',	'i',	'j',	'k',	'l',	'm',	'n',	'o',
196162674Spiso	'p',	'q',	'r',	's',	't',	'u',	'v',	'w',
197162674Spiso     	'x',	'y',	'z',	0x5b,	0x5c,	0x5d,	0x5e,	0x5f,
198162674Spiso	0x60,	'a',	'b',	'c',	'd',	'e',	'f',	'g',
199162674Spiso     	'h',	'i',	'j',	'k',	'l',	'm',	'n',	'o',
200162674Spiso	'p',	'q',	'r',	's',	't',	'u',	'v',	'w',
201162674Spiso     	'x',	'y',	'z',	0x7b,	0x7c,	0x7d,	0x7e,	0x7f,
202162674Spiso	0x80,	0x81,	0x82,	0x83,	0x84,	0x85,	0x86,	0x87,
203162674Spiso     	0x88,	0x89,	0x8a,	0x8b,	0x8c,	0x8d,	0x8e,	0x8f,
204162674Spiso	0x90,	0x91,	0x92,	0x93,	0x94,	0x95,	0x96,	0x97,
205162674Spiso     	0x98,	0x99,	0x9a,	0x9b,	0x9c,	0x9d,	0x9e,	0x9f,
206162674Spiso	0xa0,	0xa1,	0xa2,	0xa3,	0xa4,	0xa5,	0xa6,	0xa7,
207162674Spiso     	0xa8,	0xa9,	0xaa,	0xab,	0xac,	0xad,	0xae,	0xaf,
208162674Spiso	0xb0,	0xb1,	0xb2,	0xb3,	0xb4,	0xb5,	0xb6,	0xb7,
20963899Sarchie     	0xb8,	0xb9,	0xba,	0xbb,	0xbc,	0xbd,	0xbe,	0xbf,
21063899Sarchie	0xc0,	0xc1,	0xc2,	0xc3,	0xc4,	0xc5,	0xc6,	0xc7,
21163899Sarchie     	0xc8,	0xc9,	0xca,	0xcb,	0xcc,	0xcd,	0xce,	0xcf,
21263899Sarchie	0xd0,	0xd1,	0xd2,	0xd3,	0xd4,	0xd5,	0xd6,	0xd7,
21365892Sru     	0xd8,	0xd9,	0xda,	0xdb,	0xdc,	0xdd,	0xde,	0xdf,
21471796Sbrian	0xe0,	0xe1,	0xe2,	0xe3,	0xe4,	0xe5,	0xe6,	0xe7,
21563899Sarchie     	0xe8,	0xe9,	0xea,	0xeb,	0xec,	0xed,	0xee,	0xef,
216127094Sdes	0xf0,	0xf1,	0xf2,	0xf3,	0xf4,	0xf5,	0xf6,	0xf7,
217127094Sdes     	0xf8,	0xf9,	0xfa,	0xfb,	0xfc,	0xfd,	0xfe,	0xff,
21863899Sarchie    },
219127094Sdes    {	0x00,	0x01,	0x02,	0x03,	0x04,	0x05,	0x06,	0x07,
220127094Sdes     	0x08,	0x09,	0x0a,	0x0b,	0x0c,	0x0d,	0x0e,	0x0f,
221127094Sdes	0x10,	0x11,	0x12,	0x13,	0x14,	0x15,	0x16,	0x17,
222127094Sdes     	0x18,	0x19,	0x1a,	0x1b,	0x1c,	0x1d,	0x1e,	0x1f,
223127094Sdes	0x20,	0x21,	0x22,	0x23,	0x24,	0x25,	0x26,	0x27,
224127094Sdes     	0x28,	0x29,	0x2a,	0x2b,	0x2c,	0x2d,	0x2e,	0x2f,
225127094Sdes	0x30,	0x31,	0x32,	0x33,	0x34,	0x35,	0x36,	0x37,
226127094Sdes     	0x38,	0x39,	0x3a,	0x3b,	0x3c,	0x3d,	0x3e,	0x3f,
227131613Sdes	0x40,	'A',	'B',	'C',	'D',	'E',	'F',	'G',
228127094Sdes     	'H',	'I',	'J',	'K',	'L',	'M',	'N',	'O',
229127094Sdes	'P',	'Q',	'R',	'S',	'T',	'U',	'V',	'W',
23063899Sarchie     	'X',	'Y',	'Z',	0x5b,	0x5c,	0x5d,	0x5e,	0x5f,
231131613Sdes	0x60,	'A',	'B',	'C',	'D',	'E',	'F',	'G',
23263899Sarchie     	'H',	'I',	'J',	'K',	'L',	'M',	'N',	'O',
23363899Sarchie	'P',	'Q',	'R',	'S',	'T',	'U',	'V',	'W',
23465892Sru     	'X',	'Y',	'Z',	0x7b,	0x7c,	0x7d,	0x7e,	0x7f,
235124621Sphk	0x80,	0x81,	0x82,	0x83,	0x84,	0x85,	0x86,	0x87,
236131614Sdes     	0x88,	0x89,	0x8a,	0x8b,	0x8c,	0x8d,	0x8e,	0x8f,
237127094Sdes	0x90,	0x91,	0x92,	0x93,	0x94,	0x95,	0x96,	0x97,
238127094Sdes     	0x98,	0x99,	0x9a,	0x9b,	0x9c,	0x9d,	0x9e,	0x9f,
23963899Sarchie	0xa0,	0xa1,	0xa2,	0xa3,	0xa4,	0xa5,	0xa6,	0xa7,
240127094Sdes     	0xa8,	0xa9,	0xaa,	0xab,	0xac,	0xad,	0xae,	0xaf,
241127094Sdes	0xb0,	0xb1,	0xb2,	0xb3,	0xb4,	0xb5,	0xb6,	0xb7,
242127094Sdes     	0xb8,	0xb9,	0xba,	0xbb,	0xbc,	0xbd,	0xbe,	0xbf,
243127094Sdes	0xc0,	0xc1,	0xc2,	0xc3,	0xc4,	0xc5,	0xc6,	0xc7,
244127094Sdes     	0xc8,	0xc9,	0xca,	0xcb,	0xcc,	0xcd,	0xce,	0xcf,
245127094Sdes	0xd0,	0xd1,	0xd2,	0xd3,	0xd4,	0xd5,	0xd6,	0xd7,
246127094Sdes     	0xd8,	0xd9,	0xda,	0xdb,	0xdc,	0xdd,	0xde,	0xdf,
247127094Sdes	0xe0,	0xe1,	0xe2,	0xe3,	0xe4,	0xe5,	0xe6,	0xe7,
248127094Sdes     	0xe8,	0xe9,	0xea,	0xeb,	0xec,	0xed,	0xee,	0xef,
249131614Sdes	0xf0,	0xf1,	0xf2,	0xf3,	0xf4,	0xf5,	0xf6,	0xf7,
250127094Sdes     	0xf8,	0xf9,	0xfa,	0xfb,	0xfc,	0xfd,	0xfe,	0xff,
25163899Sarchie    },
252127094Sdes};
253131699Sdes
254127094Sdes_RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;
255127094Sdes
256127094Sdesint __mb_cur_max = 1;
25763899Sarchie
258127094Sdeschar	*_PathLocale;
259127094Sdes