changeset 13162:61ea578f8715

7 Need locale databases Reviewed by: richlowe@richlowe.net Approved by: richlowe@richlowe.net
author Garrett D'Amore <garrett@nexenta.com>
date Mon, 30 Aug 2010 23:48:20 -0700
parents 35133fa0d604
children 78d5e5abfefa
files exception_lists/hdrchk exception_lists/mapfilechk usr/src/cmd/Makefile usr/src/cmd/mklocale/Makefile usr/src/cmd/mklocale/Makefile.common usr/src/cmd/mklocale/Makefile.targ usr/src/cmd/mklocale/README.locale_name usr/src/cmd/mklocale/collate/Makefile usr/src/cmd/mklocale/collate/THIRDPARTYLICENSE usr/src/cmd/mklocale/collate/THIRDPARTYLICENSE.descrip usr/src/cmd/mklocale/collate/common.h usr/src/cmd/mklocale/collate/data/en.ISO8859-1.src usr/src/cmd/mklocale/collate/data/en.ISO8859-15.src usr/src/cmd/mklocale/collate/data/en.US-ASCII.src usr/src/cmd/mklocale/collate/data/en.UTF-8.src usr/src/cmd/mklocale/collate/data/map.ARMSCII-8 usr/src/cmd/mklocale/collate/data/map.CP1131 usr/src/cmd/mklocale/collate/data/map.CP1251 usr/src/cmd/mklocale/collate/data/map.CP866 usr/src/cmd/mklocale/collate/data/map.ISCII-DEV usr/src/cmd/mklocale/collate/data/map.ISO8859-1 usr/src/cmd/mklocale/collate/data/map.ISO8859-13 usr/src/cmd/mklocale/collate/data/map.ISO8859-15 usr/src/cmd/mklocale/collate/data/map.ISO8859-2 usr/src/cmd/mklocale/collate/data/map.ISO8859-4 usr/src/cmd/mklocale/collate/data/map.ISO8859-5 usr/src/cmd/mklocale/collate/data/map.ISO8859-7 usr/src/cmd/mklocale/collate/data/map.ISO8859-9 usr/src/cmd/mklocale/collate/data/map.KOI8-R usr/src/cmd/mklocale/collate/data/map.KOI8-U usr/src/cmd/mklocale/collate/data/map.PT154 usr/src/cmd/mklocale/collate/mkcollate_lex.l usr/src/cmd/mklocale/collate/mkcollate_yacc.y usr/src/cmd/mklocale/ctype/Makefile usr/src/cmd/mklocale/ctype/THIRDPARTYLICENSE usr/src/cmd/mklocale/ctype/THIRDPARTYLICENSE.descrip usr/src/cmd/mklocale/ctype/data/ISO8859-1.src usr/src/cmd/mklocale/ctype/data/ISO8859-15.src usr/src/cmd/mklocale/ctype/data/US-ASCII.src usr/src/cmd/mklocale/ctype/data/UTF-8.src usr/src/cmd/mklocale/ctype/extern.h usr/src/cmd/mklocale/ctype/ldef.h usr/src/cmd/mklocale/ctype/mkctype_lex.l usr/src/cmd/mklocale/ctype/mkctype_yacc.y usr/src/cmd/mklocale/messages/Makefile usr/src/cmd/mklocale/messages/data/en.src usr/src/cmd/mklocale/monetary/Makefile usr/src/cmd/mklocale/monetary/data/en_AU.src usr/src/cmd/mklocale/monetary/data/en_CA.src usr/src/cmd/mklocale/monetary/data/en_GB.ASCII.src usr/src/cmd/mklocale/monetary/data/en_GB.LATIN.src usr/src/cmd/mklocale/monetary/data/en_GB.UTF-8.src usr/src/cmd/mklocale/monetary/data/en_IE.UTF-8.src usr/src/cmd/mklocale/monetary/data/en_NZ.src usr/src/cmd/mklocale/monetary/data/en_US.src usr/src/cmd/mklocale/numeric/Makefile usr/src/cmd/mklocale/numeric/data/en.src usr/src/cmd/mklocale/time/Makefile usr/src/cmd/mklocale/time/data/en_GB.src usr/src/cmd/mklocale/time/data/en_US.src usr/src/lib/libc/port/locale/collate.c usr/src/lib/libc/port/locale/ldpart.c usr/src/lib/libc/port/locale/setlocale.c usr/src/lib/libc/port/locale/setrunelocale.c usr/src/pkg/manifests/SUNWcs.mf usr/src/pkg/manifests/locale-en.mf usr/src/pkg/manifests/text-locale.mf
diffstat 67 files changed, 8707 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/exception_lists/hdrchk	Tue Aug 31 01:26:06 2010 -0400
+++ b/exception_lists/hdrchk	Mon Aug 30 23:48:20 2010 -0700
@@ -16,6 +16,9 @@
 usr/src/cmd/krb5/ldap_util/kdb5_ldap_services.h
 usr/src/cmd/krb5/ldap_util/kdb5_ldap_util.h
 usr/src/cmd/krb5/slave/kprop.h
+usr/src/cmd/mklocale/collate/common.h
+usr/src/cmd/mklocale/ctype/extern.h
+usr/src/cmd/mklocale/ctype/ldef.h
 usr/src/common/openssl/crypto/krb5/krb5_asn.h
 usr/src/lib/gss_mechs/mech_krb5/et/error_table.h
 usr/src/lib/gss_mechs/mech_krb5/et/internal.h
--- a/exception_lists/mapfilechk	Tue Aug 31 01:26:06 2010 -0400
+++ b/exception_lists/mapfilechk	Mon Aug 30 23:48:20 2010 -0700
@@ -43,5 +43,6 @@
 usr/src/lib/README.mapfiles
 usr/src/lib/fm/topo/maps/Makefile.map
 usr/src/cmd/perl/*
+usr/src/cmd/mklocale/*
 usr/src/tools/onbld/Checks/Mapfile*
 usr/src/tools/scripts/*
--- a/usr/src/cmd/Makefile	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/cmd/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -254,6 +254,7 @@
 	mkdir		\
 	mkfifo		\
 	mkfile		\
+	mklocale	\
 	mkmsgs		\
 	mknod		\
 	mkpwdict	\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,41 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+PROG= mklocale
+
+include ../Makefile.cmd
+
+SUBDIRS = ctype collate messages monetary numeric time
+
+all:=		TARGET=	all
+install:=	TARGET=	install
+clean:=		TARGET=	clean
+clobber:=	TARGET= clobber
+lint:=		TARGET=	lint
+check:=		TARGET=	check
+
+.KEEP_STATE:
+
+.PARALLEL:	$(SUBDIRS)
+
+all clean install lint check clobber: $(SUBDIRS)
+
+# We don't deliver any programs, so we don't deliver messaging
+# data for them either.
+_msg:
+
+$(SUBDIRS):	FRC
+	cd $@; pwd; $(MAKE) $(TARGET)
+
+FRC:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/Makefile.common	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,42 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+include $(SRC)/cmd/Makefile.cmd
+
+LOCALES=	\
+	en_AU.ISO8859-1 en_AU.ISO8859-15 en_AU.US-ASCII en_AU.UTF-8 \
+	en_CA.ISO8859-1 en_CA.ISO8859-15 en_CA.US-ASCII en_CA.UTF-8 \
+	en_GB.ISO8859-1 en_GB.ISO8859-15 en_GB.US-ASCII en_GB.UTF-8 \
+	en_IE.UTF-8 \
+	en_NZ.ISO8859-1 en_NZ.ISO8859-15 en_NZ.US-ASCII en_NZ.UTF-8 \
+	en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII en_US.UTF-8
+
+MACHLOCALES=$(LOCALES:%=$(MACH)/%)
+
+ROOTLOCALE=$(ROOT)/usr/lib/locale
+
+ROOTLOCDIRS=\
+	$(ROOT)/usr .WAIT \
+	$(ROOT)/usr/lib .WAIT \
+	$(ROOT)/usr/lib/locale .WAIT \
+	$(LOCALES:%=$(ROOTLOCALE)/%) .WAIT \
+	$(LOCALES:%=$(ROOTLOCALE)/%/$(CATEGORY))
+
+ROOTLOCDATA=\
+	$(LOCALES:%=$(ROOTLOCALE)/%/$(CATEGORY)/LCL_DATA)
+
+$(ROOTLOCDATA)	:=	FILEMODE=0444
+
+HASHSTRIP	=	$(GREP) -v '^$(POUND_SIGN)'
+INS.nohash	=	$(RM) $@; $(GREP) -v '^$(POUND_SIGN)' $< > $@
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/Makefile.targ	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,41 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+include $(SRC)/cmd/Makefile.targ
+
+install: all $(ROOTLOCDIRS) .WAIT $(ROOTLOCDATA)
+
+$(MACH) $(ROOTLOCDIRS):
+	$(INS.dir)
+
+$(MACH)/%.o:	%.c $(MACH)
+	$(COMPILE.c) -o $@ $<
+
+$(ROOTLOCALE)/%/LC_CTYPE/LCL_DATA:	$(MACH)/%
+	$(INS.rename)
+
+$(ROOTLOCALE)/%/LC_COLLATE/LCL_DATA:	$(MACH)/%
+	$(INS.rename)
+
+$(ROOTLOCALE)/%/LC_MESSAGES/LCL_DATA:	$(MACH)/%
+	$(INS.rename)
+
+$(ROOTLOCALE)/%/LC_MONETARY/LCL_DATA:	$(MACH)/%
+	$(INS.rename)
+
+$(ROOTLOCALE)/%/LC_NUMERIC/LCL_DATA:	$(MACH)/%
+	$(INS.rename)
+
+$(ROOTLOCALE)/%/LC_TIME/LCL_DATA:	$(MACH)/%
+	$(INS.rename)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/README.locale_name	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,8 @@
+
+Locale name string format must be compliant with XPG3 and
+using following format.
+	<locale name>   ::= <language>_<territory>.<encoding>
+	<language>      ::= based on ISO 639
+	<territory>     ::= based on ISO 3166 (country code)
+	<encoding>      ::= X11 codeset preferred
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,88 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+PROG= mkcollate
+CATEGORY=LC_COLLATE
+
+include ../Makefile.common
+
+CPPFLAGS += -I$(SRC)/lib/libc/port/locale -D_FILE_OFFSET_BITS=64
+YFLAGS	= -d -b mkcollate_yacc
+LFLAGS	= -t
+
+OBJS = $(MACH)/mkcollate_lex.o $(MACH)/mkcollate_yacc.tab.o
+HDRS = common.h
+CLEANFILES =	mkcollate_yacc.tab.c mkcollate_yacc.tab.h mkcollate_lex.c
+
+en_COMMON = en_AU en_CA en_GB en_NZ en_US
+en_ASCII = $(en_COMMON:%=%.US-ASCII)
+en_LATIN1 = $(en_COMMON:%=%.ISO8859-1)
+en_LATIN15 = $(en_COMMON:%=%.ISO8859-15)
+en_UTF8 = $(en_COMMON:%=%.UTF-8) en_IE.UTF-8
+en_LOCALES = $(en_ASCII) $(en_LATIN1) $(en_LATIN15) $(en_UTF8)
+
+.KEEP_STATE:
+
+all: $(MACH)/$(PROG) $(MACHLOCALES)
+
+$(MACH)/$(PROG):	$(OBJS)
+	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
+	$(POST_PROCESS)
+
+$(en_LATIN1:%=$(MACH)/%): 	$(MACH)/en.ISO8859-1
+	$(RM) $@
+	$(LN) $(MACH)/en.ISO8859-1 $@
+
+$(en_LATIN15:%=$(MACH)/%): 	$(MACH)/en.ISO8859-15
+	$(RM) $@
+	$(LN) $(MACH)/en.ISO8859-15 $@
+
+$(en_ASCII:%=$(MACH)/%):	$(MACH)/en.US-ASCII
+	$(RM) $@
+	$(LN) $(MACH)/en.US-ASCII $@
+
+$(en_UTF8:%=$(MACH)/%):		$(MACH)/en.UTF-8
+	$(RM) $@
+	$(LN) $(MACH)/en.UTF-8 $@
+
+mkcollate_lex.c:	mkcollate_lex.l	mkcollate_yacc.tab.h $(HDRS)
+	$(FLEX) $(LFLAGS) mkcollate_lex.l > $@
+
+mkcollate_yacc.tab.c mkcollate_yacc.tab.h:	mkcollate_yacc.y $(HDRS)
+	$(YACC) $(YFLAGS) mkcollate_yacc.y
+
+clean:
+	$(RM) $(OBJS) $(CLEANFILES)
+	$(RM) -r $(MACH)
+
+#
+# Lint does nothing for us, because yacc and lex outputs are themselves
+# not lint clean.  This is something that it would be good to address.
+#
+lint:
+
+#
+# Likewise, the yacc and lex outputs are not cstyle clean.
+#
+check:
+	$(CSTYLE) -cPp $(HDRS)
+
+
+#
+# Rules for building encoding data files.
+#
+$(MACH)/%: data/%.src $(MACH)/$(PROG)
+	$(MACH)/$(PROG) -o $@ -I data $(@:$(MACH)/%=data/%.src)
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/THIRDPARTYLICENSE	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,24 @@
+Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
+		at Electronni Visti IA, Kiev, Ukraine.
+			All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/THIRDPARTYLICENSE.descrip	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,1 @@
+MKCOLLATE UTILITY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/common.h	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,8 @@
+
+#define CHARMAP_SYMBOL_LEN 64
+#define BUFSIZE 80
+
+extern int line_no;
+
+extern uchar_t charmap_table[UCHAR_MAX + 1][CHARMAP_SYMBOL_LEN];
+extern char map_name[FILENAME_MAX];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/en.ISO8859-1.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,36 @@
+# latin1 (backward compatible with ASCII)
+#
+charmap map.ISO8859-1
+order \
+# controls
+	<NU>;...;<US>;<PA>;...;<AC>;\
+#
+	<NS>;<SP>;!;<!I>;\";<<<>;</>/>>;<Nb>;\
+	<Cu>;<Ct>;<DO>;<Pd>;<Ye>;\
+	%;&;<',>;';\(;\);*;+;<+->;<-:>;<*X>;\,;<-->;-;.;/;\
+# digits
+	(0,<14>,<12>,<34>);(1,<1S>);(2,<2S>);(3,<3S>);4;...;9;\
+#
+	:;\;;\<;=;>;?;<?I>;<SE>;<PI>;<Co>;<Rg>;<At>;\
+# capital
+	(A,<A'>,<A!>,<A/>>,<AA>,<A:>,<A?>,<AE>);\
+	B;(C,<C,>);D;(E,<E'>,<E!>,<E/>>,<E:>);\
+	F;G;H;(I,<I'>,<I!>,<I/>>,<I:>);\
+	J;...;M;(N,<N?>);(O,<O'>,<O!>,<O/>>,<O:>,<O?>,<O//>);\
+	P;...;T;(U,<U'>,<U!>,<U/>>,<U:>);\
+	V;W;X;(Y,<Y'>);Z;\
+	<D->;<TH>;\
+#
+	[;\\;];^;<':>;_;<'m>;<''>;`;\
+# small
+	(a,<a'>,<a!>,<a/>>,<aa>,<a:>,<a?>,<ae>);\
+	b;(c,<c,>);d;(e,<e'>,<e!>,<e/>>,<e:>);\
+	f;g;h;(i,<i'>,<i!>,<i/>>,<i:>);\
+	j;...;m;(n,<n?>);(o,<o'>,<o!>,<o/>>,<o:>,<o?>,<o//>);\
+	p;...;t;(u,<u'>,<u!>,<u/>>,<u:>);\
+	v;w;x;(y,<y'>,<y:>);z;\
+	<d->;<th>;<ss>;\
+#
+	\{;<NO>;|;<BB>;\};~;<.M>;<DG>;<My>;<DT>;\
+# remains
+	<-a>;<-o>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/en.ISO8859-15.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,36 @@
+# latin1 (backward compatible with ASCII)
+#
+charmap map.ISO8859-15
+order \
+# controls
+	<NU>;...;<US>;<PA>;...;<AC>;\
+#
+	<NS>;<SP>;!;<!I>;\";<<<>;</>/>>;<Nb>;\
+	<Eu>;<Ct>;<DO>;<Pd>;<Ye>;\
+	%;&;';\(;\);*;+;<+->;<-:>;<*X>;\,;<-->;-;.;/;\
+# digits
+	0;(1,<1S>);(2,<2S>);(3,<3S>);4;...;9;\
+#
+	:;\;;\<;=;>;?;<?I>;<SE>;<PI>;<Co>;<Rg>;<At>;\
+# capital
+	(A,<A'>,<A!>,<A/>>,<AA>,<A:>,<A?>,<AE>);\
+	B;(C,<C,>);D;(E,<E'>,<E!>,<E/>>,<E:>);\
+	F;G;H;(I,<I'>,<I!>,<I/>>,<I:>);\
+	J;...;M;(N,<N?>);(O,<O'>,<O!>,<O/>>,<O:>,<O?>,<O//>,<OE>);\
+	P;...;R;(S,<S<>);T;(U,<U'>,<U!>,<U/>>,<U:>);\
+	V;W;X;(Y,<Y'>,<Y:>);(Z,<Z<>);\
+	<D->;<TH>;\
+#
+	[;\\;];^;_;<'m>;`;\
+# small
+	(a,<a'>,<a!>,<a/>>,<aa>,<a:>,<a?>,<ae>);\
+	b;(c,<c,>);d;(e,<e'>,<e!>,<e/>>,<e:>);\
+	f;g;h;(i,<i'>,<i!>,<i/>>,<i:>);\
+	j;...;m;(n,<n?>);(o,<o'>,<o!>,<o/>>,<o:>,<o?>,<o//>,<oe>);\
+	p;...;r;(s,<s<>);t;(u,<u'>,<u!>,<u/>>,<u:>);\
+	v;w;x;(y,<y'>,<y:>);(z,<z<>);\
+	<d->;<th>;<ss>;\
+#
+	\{;<NO>;|;\};~;<.M>;<DG>;<My>;<DT>;\
+# remains
+	<-a>;<-o>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/en.US-ASCII.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,6 @@
+#
+# English locales are already in correct sorted order for the following
+# encodings: US-ASCII, ISO8859-1, ISO8859-15, and UTF-8. 
+#
+order \
+	\x00;...;\xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/en.UTF-8.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,6 @@
+#
+# English locales are already in correct sorted order for the following
+# encodings: US-ASCII, ISO8859-1, ISO8859-15, and UTF-8. 
+#
+order \
+	\x00;...;\xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ARMSCII-8	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,143 @@
+#
+# map.ARMSCII-8 defined by Vahe Khachikyan <vahe@khachikyan.de>
+# 
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+armeternity	\xA1
+armew		\xA2
+armfullstop	\xA3
+armparenright	\xA4
+armparenleft	\xA5
+armquotright	\xA6
+armquotleft	\xA7
+armemdash	\xA8
+armdot		\xA9
+armsep		\xAA
+armcomma	\xAB
+armendash	\xAC
+armyentamna	\xAD
+armellipsis	\xAE
+armexclam	\xAF
+armaccent	\xB0
+armquestion	\xB1
+Armayb		\xB2
+armayb		\xB3
+Armben		\xB4
+armben		\xB5
+Armgim		\xB6
+armgim		\xB7
+Armda		\xB8
+armda		\xB9
+Armyech		\xBA
+armyech		\xBB
+Armza		\xBC
+armza		\xBD
+Arme		\xBE
+arme		\xBF
+Armat		\xC0
+armat		\xC1
+Armto		\xC2
+armto		\xC3
+Armzhe		\xC4
+armzhe		\xC5
+Armini		\xC6
+armini		\xC7
+Armlyun		\xC8
+armlyun		\xC9
+Armkhe		\xCA
+armkhe		\xCB
+Armtsa		\xCC
+armtsa		\xCD
+Armken		\xCE
+armken		\xCF
+Armho		\xD0
+armho		\xD1
+Armdza		\xD2
+armdza		\xD3
+Armghat		\xD4
+armghat		\xD5
+Armtche		\xD6
+armtche		\xD7
+Armmen		\xD8
+armmen		\xD9
+Armhi		\xDA
+armhi		\xDB
+Armnu		\xDC
+armnu		\xDD
+Armsha		\xDE
+armsha		\xDF
+Armvo		\xE0
+armvo		\xE1
+Armcha		\xE2
+armcha		\xE3
+Armpe		\xE4
+armpe		\xE5
+Armje		\xE6
+armje		\xE7
+Armra		\xE8
+armra		\xE9
+Armse		\xEA
+armse		\xEB
+Armvev		\xEC
+armvev		\xED
+Armtyun		\xEE
+armtyun		\xEF
+Armre		\xF0
+armre		\xF1
+Armtso		\xF2
+armtso		\xF3
+Armvyun		\xF4
+armvyun		\xF5
+Armpyur		\xF6
+armpyur		\xF7
+Armke		\xF8
+armke		\xF9
+Armo		\xFA
+armo		\xFB
+Armfe		\xFC
+armfe		\xFD
+armapostrophe	\xFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.CP1131	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+A= \x80
+B= \x81
+V= \x82
+G= \x83
+D= \x84
+E= \x85
+Z% \x86
+Z= \x87
+I= \x88
+J= \x89
+K= \x8a
+L= \x8b
+M= \x8c
+N= \x8d
+O= \x8e
+P= \x8f
+R= \x90
+S= \x91
+T= \x92
+U= \x93
+F= \x94
+H= \x95
+C= \x96
+C% \x97
+S% \x98
+Sc \x99
+=" \x9a
+Y= \x9b
+%" \x9c
+JE \x9d
+JU \x9e
+JA \x9f
+a= \xa0
+b= \xa1
+v= \xa2
+g= \xa3
+d= \xa4
+e= \xa5
+z% \xa6
+z= \xa7
+i= \xa8
+j= \xa9
+k= \xaa
+l= \xab
+m= \xac
+n= \xad
+o= \xae
+p= \xaf
+.S \xb0
+:S \xb1
+?S \xb2
+vv \xb3
+vl \xb4
+vL \xb5
+Vl \xb6
+Dl \xb7
+dL \xb8
+VL \xb9
+VV \xba
+LD \xbb
+UL \xbc
+Ul \xbd
+uL \xbe
+dl \xbf
+ur \xc0
+uh \xc1
+dh \xc2
+vr \xc3
+hh \xc4
+vh \xc5
+vR \xc6
+Vr \xc7
+UR \xc8
+DR \xc9
+UH \xca
+DH \xcb
+VR \xcc
+HH \xcd
+VH \xce
+uH \xcf
+Uh \xd0
+dH \xd1
+Dh \xd2
+Ur \xd3
+uR \xd4
+dR \xd5
+Dr \xd6
+Vh \xd7
+vH \xd8
+ul \xd9
+dr \xda
+FB \xdb
+LB \xdc
+lB \xdd
+RB \xde
+TB \xdf
+r= \xe0
+s= \xe1
+t= \xe2
+u= \xe3
+f= \xe4
+h= \xe5
+c= \xe6
+c% \xe7
+s% \xe8
+sc \xe9
+=' \xea
+y= \xeb
+%' \xec
+je \xed
+ju \xee
+ja \xef
+IO \xf0
+io \xf1
+IE \xf2
+ie \xf3
+YI \xf4
+yi \xf5
+V% \xf6
+v% \xf7
+II \xf8
+ii \xf9
+.M \xfa
+Cu \xfb
+G3 \xfc
+g3 \xfd
+Sb \xfe
+NS \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.CP1251	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,256 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+! \x21
+" \x22
+Nb \x23
+DO \x24
+% \x25
+& \x26
+' \x27
+( \x28
+) \x29
+* \x2a
++ \x2b
+, \x2c
+- \x2d
+. \x2e
+/ \x2f
+0 \x30
+1 \x31
+2 \x32
+3 \x33
+4 \x34
+5 \x35
+6 \x36
+7 \x37
+8 \x38
+9 \x39
+: \x3a
+; \x3b
+< \x3c
+= \x3d
+> \x3e
+? \x3f
+At \x40
+A \x41
+B \x42
+C \x43
+D \x44
+E \x45
+F \x46
+G \x47
+H \x48
+I \x49
+J \x4a
+K \x4b
+L \x4c
+M \x4d
+N \x4e
+O \x4f
+P \x50
+Q \x51
+R \x52
+S \x53
+T \x54
+U \x55
+V \x56
+W \x57
+X \x58
+Y \x59
+Z \x5a
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+_ \x5f
+'! \x60
+a \x61
+b \x62
+c \x63
+d \x64
+e \x65
+f \x66
+g \x67
+h \x68
+i \x69
+j \x6a
+k \x6b
+l \x6c
+m \x6d
+n \x6e
+o \x6f
+p \x70
+q \x71
+r \x72
+s \x73
+t \x74
+u \x75
+v \x76
+w \x77
+x \x78
+y \x79
+z \x7a
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+D% \x80
+G% \x81
+.9 \x82
+g% \x83
+:9 \x84
+.3 \x85
+/- \x86
+/= \x87
+Eu \x88
+%0 \x89
+LJ \x8a
+<1 \x8b
+NJ \x8c
+KJ \x8d
+Ts \x8e
+DZ \x8f
+d% \x90
+'6 \x91
+'9 \x92
+"6 \x93
+"9 \x94
+sb \x95
+-N \x96
+-M \x97
+FB \x98
+TM \x99
+lj \x9a
+>1 \x9b
+nj \x9c
+kj \x9d
+ts \x9e
+dz \x9f
+NS \xa0
+V% \xa1
+v% \xa2
+J% \xa3
+Cu \xa4
+G3 \xa5
+BB \xa6
+SE \xa7
+IO \xa8
+Co \xa9
+IE \xaa
+<< \xab
+NO \xac
+-- \xad
+Rg \xae
+YI \xaf
+DG \xb0
++- \xb1
+II \xb2
+ii \xb3
+g3 \xb4
+My \xb5
+PI \xb6
+.M \xb7
+io \xb8
+N0 \xb9
+ie \xba
+>> \xbb
+j% \xbc
+DS \xbd
+ds \xbe
+yi \xbf
+A= \xc0
+B= \xc1
+V= \xc2
+G= \xc3
+D= \xc4
+E= \xc5
+Z% \xc6
+Z= \xc7
+I= \xc8
+J= \xc9
+K= \xca
+L= \xcb
+M= \xcc
+N= \xcd
+O= \xce
+P= \xcf
+R= \xd0
+S= \xd1
+T= \xd2
+U= \xd3
+F= \xd4
+H= \xd5
+C= \xd6
+C% \xd7
+S% \xd8
+Sc \xd9
+=" \xda
+Y= \xdb
+%" \xdc
+JE \xdd
+JU \xde
+JA \xdf
+a= \xe0
+b= \xe1
+v= \xe2
+g= \xe3
+d= \xe4
+e= \xe5
+z% \xe6
+z= \xe7
+i= \xe8
+j= \xe9
+k= \xea
+l= \xeb
+m= \xec
+n= \xed
+o= \xee
+p= \xef
+r= \xf0
+s= \xf1
+t= \xf2
+u= \xf3
+f= \xf4
+h= \xf5
+c= \xf6
+c% \xf7
+s% \xf8
+sc \xf9
+=' \xfa
+y= \xfb
+%' \xfc
+je \xfd
+ju \xfe
+ja \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.CP866	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+A= \x80
+B= \x81
+V= \x82
+G= \x83
+D= \x84
+E= \x85
+Z% \x86
+Z= \x87
+I= \x88
+J= \x89
+K= \x8a
+L= \x8b
+M= \x8c
+N= \x8d
+O= \x8e
+P= \x8f
+R= \x90
+S= \x91
+T= \x92
+U= \x93
+F= \x94
+H= \x95
+C= \x96
+C% \x97
+S% \x98
+Sc \x99
+=" \x9a
+Y= \x9b
+%" \x9c
+JE \x9d
+JU \x9e
+JA \x9f
+a= \xa0
+b= \xa1
+v= \xa2
+g= \xa3
+d= \xa4
+e= \xa5
+z% \xa6
+z= \xa7
+i= \xa8
+j= \xa9
+k= \xaa
+l= \xab
+m= \xac
+n= \xad
+o= \xae
+p= \xaf
+.S \xb0
+:S \xb1
+?S \xb2
+vv \xb3
+vl \xb4
+vL \xb5
+Vl \xb6
+Dl \xb7
+dL \xb8
+VL \xb9
+VV \xba
+LD \xbb
+UL \xbc
+Ul \xbd
+uL \xbe
+dl \xbf
+ur \xc0
+uh \xc1
+dh \xc2
+vr \xc3
+hh \xc4
+vh \xc5
+vR \xc6
+Vr \xc7
+UR \xc8
+DR \xc9
+UH \xca
+DH \xcb
+VR \xcc
+HH \xcd
+VH \xce
+uH \xcf
+Uh \xd0
+dH \xd1
+Dh \xd2
+Ur \xd3
+uR \xd4
+dR \xd5
+Dr \xd6
+Vh \xd7
+vH \xd8
+ul \xd9
+dr \xda
+FB \xdb
+LB \xdc
+lB \xdd
+RB \xde
+TB \xdf
+r= \xe0
+s= \xe1
+t= \xe2
+u= \xe3
+f= \xe4
+h= \xe5
+c= \xe6
+c% \xe7
+s% \xe8
+sc \xe9
+=' \xea
+y= \xeb
+%' \xec
+je \xed
+ju \xee
+ja \xef
+IO \xf0
+io \xf1
+IE \xf2
+ie \xf3
+YI \xf4
+yi \xf5
+V% \xf6
+v% \xf7
+DG \xf8
+Sb \xf9
+.M \xfa
+RT \xfb
+N0 \xfc
+Cu \xfd
+fS \xfe
+NS \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISCII-DEV	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,163 @@
+NU 							 \x00
+SH 							 \x01
+SX 							 \x02
+EX 							 \x03
+ET 							 \x04
+EQ 							 \x05
+AK 							 \x06
+BL 							 \x07
+BS 							 \x08
+HT 							 \x09
+LF 							 \x0a
+VT 							 \x0b
+FF 							 \x0c
+CR 							 \x0d
+SO 							 \x0e
+SI 							 \x0f
+DL 							 \x10
+D1 							 \x11
+D2 							 \x12
+D3 							 \x13
+D4 							 \x14
+NK 							 \x15
+SY 							 \x16
+EB 							 \x17
+CN 							 \x18
+EM 							 \x19
+SB 							 \x1a
+EC 							 \x1b
+FS 							 \x1c
+GS 							 \x1d
+RS 							 \x1e
+US 							 \x1f
+SP 							 \x20
+Nb 							 \x23
+DO 							 \x24
+At 							 \x40
+<( 							 \x5b
+// 							 \x5c
+)> 							 \x5d
+'> 							 \x5e
+'! 							 \x60
+(! 							 \x7b
+!! 							 \x7c
+!) 							 \x7d
+'? 							 \x7e
+DT 							 \x7f
+PA 							 \x80
+HO 							 \x81
+BH 							 \x82
+NH 							 \x83
+IN 							 \x84
+NL 							 \x85
+SA 							 \x86
+ES 							 \x87
+HS 							 \x88
+HJ 							 \x89
+VS 							 \x8a
+PD 							 \x8b
+PU 							 \x8c
+RI 							 \x8d
+S2 							 \x8e
+S3 							 \x8f
+DC 							 \x90
+P1 							 \x91
+P2 							 \x92
+TS 							 \x93
+CC 							 \x94
+MW 							 \x95
+SG 							 \x96
+EG 							 \x97
+SS 							 \x98
+GC 							 \x99
+SC 							 \x9a
+CI 							 \x9b
+ST 							 \x9c
+OC 							 \x9d
+PM 							 \x9e
+AC 							 \x9f
+NS 							 \xa0             
+Vowel-modifier-Chandrabindu                              ¡
+Vowel-modifier-Anuswar                                   ¢
+Vowel-modifier-Visarg                                    £
+Vowel-A                                                  ¤
+Vowel-AA                                                 ¥
+Vowel-I                                                  ¦
+Vowel-II                                                 §
+Vowel-U                                                  ¨
+Vowel-UU                                                 ©
+Vowel-RI                                                 ª
+Vowel-E                                                  «
+Vowel-EY                                                 ¬
+Vowel-AI                                                 ­
+Vowel-AYE                                                ®
+Vowel-O                                                  ¯
+Vowel-OW                                                 °
+Vowel-AU                                                 ±
+Vowel-AWE                                                ²
+Consonant-KA                                             ³
+Consonant-KHA                                            ´
+Consonant-GA                                             µ
+Consonant-GHA                                            ¶
+Consonant-NGA                                            ·
+Consonant-CHA                                            ¸
+Consonant-CHHA                                           ¹
+Consonant-JA                                             º
+Consonant-JHA                                            »
+Consonant-JNA                                            ¼
+Consonant-Hard-TA                                        ½
+Consonant-Hard-THA                                       ¾
+Consonant-Hard-DA                                        ¿
+Consonant-Hard-DHA                                       À
+Consonant-Hard-NA                                        Á
+Consonant-Soft-TA                                        Â
+Consonant-Soft-THA                                       Ã
+Consonant-Soft-DA                                        Ä
+Consonant-Soft-DHA                                       Å
+Consonant-Soft-NA                                        Æ
+Consonant-NA-Tamil                                       Ç
+Consonant-PA                                             È
+Consonant-PHA                                            É
+Consonant-BA                                             Ê
+Consonant-BHA                                            Ë
+Consonant-MA                                             Ì
+Consonant-YA                                             Í
+Consonant-JYA                                            Î
+Consonant-RA                                             Ï
+Consonant-Hard-RA                                        Ð
+Consonant-LA                                             Ñ
+Consonant-Hard-LA                                        Ò
+Consonant-ZHA-Tamil                                      Ó
+Consonant-VA                                             Ô
+Consonant-SHA                                            Õ
+Consonant-Hard-SHA                                       Ö
+Consonant-SA                                             ×
+Consonant-HA                                             Ø
+Consonant-invisible                                      Ù
+Vowel-sign-AA                                            Ú
+Vowel-sign-I                                             Û
+Vowel-sign-II                                            Ü
+Vowel-sign-U                                             Ý
+Vowel-sign-UU                                            Þ
+Vowel-sign-RI                                            ß
+Vowel-sign-E                                             à
+Vowel-sign-EY                                            á
+Vowel-sign-AI                                            â
+Vowel-sign-AYE                                           ã
+Vowel-sign-O                                             ä
+Vowel-sign-OW                                            å
+Vowel-sign-AU                                            æ
+Vowel-sign-AWE                                           ç
+Vowel-omission-sign                                      è
+Diacritic-sign-Nukta                                     é
+Full-Stop-Viram                                          ê
+Digit-0                                                  ñ
+Digit-1                                                  ò
+Digit-2                                                  ó
+Digit-3                                                  ô
+Digit-4                                                  õ
+Digit-5                                                  ö
+Digit-6                                                  ÷
+Digit-7                                                  ø
+Digit-8                                                  ù
+Digit-9							 ú
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-1	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+!I \xa1
+Ct \xa2
+Pd \xa3
+Cu \xa4
+Ye \xa5
+BB \xa6
+SE \xa7
+': \xa8
+Co \xa9
+-a \xaa
+<< \xab
+NO \xac
+-- \xad
+Rg \xae
+'m \xaf
+DG \xb0
++- \xb1
+2S \xb2
+3S \xb3
+'' \xb4
+My \xb5
+PI \xb6
+.M \xb7
+', \xb8
+1S \xb9
+-o \xba
+>> \xbb
+14 \xbc
+12 \xbd
+34 \xbe
+?I \xbf
+A! \xc0
+A' \xc1
+A> \xc2
+A? \xc3
+A: \xc4
+AA \xc5
+AE \xc6
+C, \xc7
+E! \xc8
+E' \xc9
+E> \xca
+E: \xcb
+I! \xcc
+I' \xcd
+I> \xce
+I: \xcf
+D- \xd0
+N? \xd1
+O! \xd2
+O' \xd3
+O> \xd4
+O? \xd5
+O: \xd6
+*X \xd7
+O/ \xd8
+U! \xd9
+U' \xda
+U> \xdb
+U: \xdc
+Y' \xdd
+TH \xde
+ss \xdf
+a! \xe0
+a' \xe1
+a> \xe2
+a? \xe3
+a: \xe4
+aa \xe5
+ae \xe6
+c, \xe7
+e! \xe8
+e' \xe9
+e> \xea
+e: \xeb
+i! \xec
+i' \xed
+i> \xee
+i: \xef
+d- \xf0
+n? \xf1
+o! \xf2
+o' \xf3
+o> \xf4
+o? \xf5
+o: \xf6
+-: \xf7
+o/ \xf8
+u! \xf9
+u' \xfa
+u> \xfb
+u: \xfc
+y' \xfd
+th \xfe
+y: \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-13	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+"" \xa1
+Ct \xa2
+Pd \xa3
+Cu \xa4
+,, \xa5
+BB \xa6
+SE \xa7
+O/ \xa8
+Co \xa9
+R, \xaa
+<< \xab
+NO \xac
+-- \xad
+Rg \xae
+AE \xaf
+DG \xb0
++- \xb1
+2S \xb2
+3S \xb3
+`` \xb4
+My \xb5
+PI \xb6
+.M \xb7
+o/ \xb8
+1S \xb9
+r, \xba
+>> \xbb
+14 \xbc
+12 \xbd
+34 \xbe
+ae \xbf
+A; \xc0
+I; \xc1
+A- \xc2
+C' \xc3
+A: \xc4
+AA \xc5
+E; \xc6
+E- \xc7
+C< \xc8
+E' \xc9
+Z' \xca
+E. \xcb
+G, \xcc
+K, \xcd
+I- \xce
+L, \xcf
+S< \xd0
+N' \xd1
+N, \xd2
+O' \xd3
+O- \xd4
+O? \xd5
+O: \xd6
+*X \xd7
+U; \xd8
+L/ \xd9
+S' \xda
+U- \xdb
+U: \xdc
+Z. \xdd
+Z< \xde
+ss \xdf
+a; \xe0
+i; \xe1
+a- \xe2
+c' \xe3
+a: \xe4
+aa \xe5
+e; \xe6
+e- \xe7
+c< \xe8
+e' \xe9
+z' \xea
+e. \xeb
+g, \xec
+k, \xed
+i- \xee
+l, \xef
+s< \xf0
+n' \xf1
+n, \xf2
+o' \xf3
+o- \xf4
+o? \xf5
+o: \xf6
+-: \xf7
+u; \xf8
+l/ \xf9
+s' \xfa
+u- \xfb
+u: \xfc
+z. \xfd
+z< \xfe
+'. \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-15	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+!I \xa1
+Ct \xa2
+Pd \xa3
+Eu \xa4
+Ye \xa5
+S< \xa6
+SE \xa7
+s< \xa8
+Co \xa9
+-a \xaa
+<< \xab
+NO \xac
+-- \xad
+Rg \xae
+'m \xaf
+DG \xb0
++- \xb1
+2S \xb2
+3S \xb3
+Z< \xb4
+My \xb5
+PI \xb6
+.M \xb7
+z< \xb8
+1S \xb9
+-o \xba
+>> \xbb
+OE \xbc
+oe \xbd
+Y: \xbe
+?I \xbf
+A! \xc0
+A' \xc1
+A> \xc2
+A? \xc3
+A: \xc4
+AA \xc5
+AE \xc6
+C, \xc7
+E! \xc8
+E' \xc9
+E> \xca
+E: \xcb
+I! \xcc
+I' \xcd
+I> \xce
+I: \xcf
+D- \xd0
+N? \xd1
+O! \xd2
+O' \xd3
+O> \xd4
+O? \xd5
+O: \xd6
+*X \xd7
+O/ \xd8
+U! \xd9
+U' \xda
+U> \xdb
+U: \xdc
+Y' \xdd
+TH \xde
+ss \xdf
+a! \xe0
+a' \xe1
+a> \xe2
+a? \xe3
+a: \xe4
+aa \xe5
+ae \xe6
+c, \xe7
+e! \xe8
+e' \xe9
+e> \xea
+e: \xeb
+i! \xec
+i' \xed
+i> \xee
+i: \xef
+d- \xf0
+n? \xf1
+o! \xf2
+o' \xf3
+o> \xf4
+o? \xf5
+o: \xf6
+-: \xf7
+o/ \xf8
+u! \xf9
+u' \xfa
+u> \xfb
+u: \xfc
+y' \xfd
+th \xfe
+y: \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-2	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+A; \xa1
+'( \xa2
+L/ \xa3
+Cu \xa4
+L< \xa5
+S' \xa6
+SE \xa7
+': \xa8
+S< \xa9
+S, \xaa
+T< \xab
+Z' \xac
+-- \xad
+Z< \xae
+Z. \xaf
+DG \xb0
+a; \xb1
+'; \xb2
+l/ \xb3
+'' \xb4
+l< \xb5
+s' \xb6
+'< \xb7
+', \xb8
+s< \xb9
+s, \xba
+t< \xbb
+z' \xbc
+'" \xbd
+z< \xbe
+z. \xbf
+R' \xc0
+A' \xc1
+A> \xc2
+A( \xc3
+A: \xc4
+L' \xc5
+C' \xc6
+C, \xc7
+C< \xc8
+E' \xc9
+E; \xca
+E: \xcb
+E< \xcc
+I' \xcd
+I> \xce
+D< \xcf
+D/ \xd0
+N' \xd1
+N< \xd2
+O' \xd3
+O> \xd4
+O" \xd5
+O: \xd6
+*X \xd7
+R< \xd8
+U0 \xd9
+U' \xda
+U" \xdb
+U: \xdc
+Y' \xdd
+T, \xde
+ss \xdf
+r' \xe0
+a' \xe1
+a> \xe2
+a( \xe3
+a: \xe4
+l' \xe5
+c' \xe6
+c, \xe7
+c< \xe8
+e' \xe9
+e; \xea
+e: \xeb
+e< \xec
+i' \xed
+i> \xee
+d< \xef
+d/ \xf0
+n' \xf1
+n< \xf2
+o' \xf3
+o> \xf4
+o" \xf5
+o: \xf6
+-: \xf7
+r< \xf8
+u0 \xf9
+u' \xfa
+u" \xfb
+u: \xfc
+y' \xfd
+t, \xfe
+'. \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-4	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+A; \xa1
+kk \xa2
+R, \xa3
+Cu \xa4
+I? \xa5
+L, \xa6
+SE \xa7
+': \xa8
+S< \xa9
+E- \xaa
+G, \xab
+T/ \xac
+-- \xad
+Z< \xae
+'m \xaf
+DG \xb0
+a; \xb1
+'; \xb2
+r, \xb3
+'' \xb4
+i? \xb5
+l, \xb6
+'< \xb7
+', \xb8
+s< \xb9
+e- \xba
+g, \xbb
+t/ \xbc
+NG \xbd
+z< \xbe
+ng \xbf
+A- \xc0
+A' \xc1
+A> \xc2
+A? \xc3
+A: \xc4
+AA \xc5
+AE \xc6
+I; \xc7
+C< \xc8
+E' \xc9
+E; \xca
+E: \xcb
+E. \xcc
+I' \xcd
+I> \xce
+I- \xcf
+D/ \xd0
+N, \xd1
+O- \xd2
+K, \xd3
+O> \xd4
+O? \xd5
+O: \xd6
+*X \xd7
+O/ \xd8
+U; \xd9
+U' \xda
+U> \xdb
+U: \xdc
+U? \xdd
+U- \xde
+ss \xdf
+a- \xe0
+a' \xe1
+a> \xe2
+a? \xe3
+a: \xe4
+aa \xe5
+ae \xe6
+i; \xe7
+c< \xe8
+e' \xe9
+e; \xea
+e: \xeb
+e. \xec
+i' \xed
+i> \xee
+i- \xef
+d/ \xf0
+n, \xf1
+o- \xf2
+k, \xf3
+o> \xf4
+o? \xf5
+o: \xf6
+-: \xf7
+o/ \xf8
+u; \xf9
+u' \xfa
+u> \xfb
+u: \xfc
+u? \xfd
+u- \xfe
+'. \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-5	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+IO \xa1
+D% \xa2
+G% \xa3
+IE \xa4
+DS \xa5
+II \xa6
+YI \xa7
+J% \xa8
+LJ \xa9
+NJ \xaa
+Ts \xab
+KJ \xac
+-- \xad
+V% \xae
+DZ \xaf
+A= \xb0
+B= \xb1
+V= \xb2
+G= \xb3
+D= \xb4
+E= \xb5
+Z% \xb6
+Z= \xb7
+I= \xb8
+J= \xb9
+K= \xba
+L= \xbb
+M= \xbc
+N= \xbd
+O= \xbe
+P= \xbf
+R= \xc0
+S= \xc1
+T= \xc2
+U= \xc3
+F= \xc4
+H= \xc5
+C= \xc6
+C% \xc7
+S% \xc8
+Sc \xc9
+=" \xca
+Y= \xcb
+%" \xcc
+JE \xcd
+JU \xce
+JA \xcf
+a= \xd0
+b= \xd1
+v= \xd2
+g= \xd3
+d= \xd4
+e= \xd5
+z% \xd6
+z= \xd7
+i= \xd8
+j= \xd9
+k= \xda
+l= \xdb
+m= \xdc
+n= \xdd
+o= \xde
+p= \xdf
+r= \xe0
+s= \xe1
+t= \xe2
+u= \xe3
+f= \xe4
+h= \xe5
+c= \xe6
+c% \xe7
+s% \xe8
+sc \xe9
+=' \xea
+y= \xeb
+%' \xec
+je \xed
+ju \xee
+ja \xef
+N0 \xf0
+io \xf1
+d% \xf2
+g% \xf3
+ie \xf4
+ds \xf5
+ii \xf6
+yi \xf7
+j% \xf8
+lj \xf9
+nj \xfa
+ts \xfb
+kj \xfc
+SE \xfd
+v% \xfe
+dz \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-7	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+9' \xa1
+'9 \xa2
+Pd \xa3
+IE \xa4
+DS \xa5
+BB \xa6
+SE \xa7
+': \xa8
+Co \xa9
+NJ \xaa
+<< \xab
+NO \xac
+-- \xad
+V% \xae
+-M \xaf
+DG \xb0
++- \xb1
+2S \xb2
+3S \xb3
+'' \xb4
+'% \xb5
+A% \xb6
+.M \xb7
+E% \xb8
+Y% \xb9
+I% \xba
+>> \xbb
+O% \xbc
+12 \xbd
+U% \xbe
+W% \xbf
+i3 \xc0
+A* \xc1
+B* \xc2
+G* \xc3
+D* \xc4
+E* \xc5
+Z* \xc6
+Y* \xc7
+H* \xc8
+I* \xc9
+K* \xca
+L* \xcb
+M* \xcc
+N* \xcd
+C* \xce
+O* \xcf
+P* \xd0
+R* \xd1
+v= \xd2
+S* \xd3
+T* \xd4
+U* \xd5
+F* \xd6
+X* \xd7
+Q* \xd8
+W* \xd9
+J* \xda
+V* \xdb
+a% \xdc
+e% \xdd
+y% \xde
+i% \xdf
+u3 \xe0
+a* \xe1
+b* \xe2
+g* \xe3
+d* \xe4
+e* \xe5
+z* \xe6
+y* \xe7
+h* \xe8
+i* \xe9
+k* \xea
+l* \xeb
+m* \xec
+n* \xed
+c* \xee
+o* \xef
+p* \xf0
+r* \xf1
+*s \xf2
+s* \xf3
+t* \xf4
+u* \xf5
+f* \xf6
+x* \xf7
+q* \xf8
+w* \xf9
+j* \xfa
+v* \xfb
+o% \xfc
+u% \xfd
+w% \xfe
+dz \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.ISO8859-9	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+PA \x80
+HO \x81
+BH \x82
+NH \x83
+IN \x84
+NL \x85
+SA \x86
+ES \x87
+HS \x88
+HJ \x89
+VS \x8a
+PD \x8b
+PU \x8c
+RI \x8d
+S2 \x8e
+S3 \x8f
+DC \x90
+P1 \x91
+P2 \x92
+TS \x93
+CC \x94
+MW \x95
+SG \x96
+EG \x97
+SS \x98
+GC \x99
+SC \x9a
+CI \x9b
+ST \x9c
+OC \x9d
+PM \x9e
+AC \x9f
+NS \xa0
+!I \xa1
+Ct \xa2
+Pd \xa3
+Cu \xa4
+Ye \xa5
+BB \xa6
+SE \xa7
+': \xa8
+Co \xa9
+-a \xaa
+<< \xab
+NO \xac
+-- \xad
+Rg \xae
+'m \xaf
+DG \xb0
++- \xb1
+2S \xb2
+3S \xb3
+'' \xb4
+My \xb5
+PI \xb6
+.M \xb7
+', \xb8
+1S \xb9
+-o \xba
+>> \xbb
+14 \xbc
+12 \xbd
+34 \xbe
+?I \xbf
+A! \xc0
+A' \xc1
+A> \xc2
+A? \xc3
+A: \xc4
+AA \xc5
+AE \xc6
+C, \xc7
+E! \xc8
+E' \xc9
+E> \xca
+E: \xcb
+I! \xcc
+I' \xcd
+I> \xce
+I: \xcf
+G( \xd0
+N? \xd1
+O! \xd2
+O' \xd3
+O> \xd4
+O? \xd5
+O: \xd6
+*X \xd7
+O/ \xd8
+U! \xd9
+U' \xda
+U> \xdb
+U: \xdc
+I. \xdd
+S, \xde
+ss \xdf
+a! \xe0
+a' \xe1
+a> \xe2
+a? \xe3
+a: \xe4
+aa \xe5
+ae \xe6
+c, \xe7
+e! \xe8
+e' \xe9
+e; \xea
+e: \xeb
+e. \xec
+i' \xed
+i> \xee
+i- \xef
+g( \xf0
+n? \xf1
+o! \xf2
+o' \xf3
+o> \xf4
+o? \xf5
+o: \xf6
+-: \xf7
+o/ \xf8
+u! \xf9
+u' \xfa
+u> \xfb
+u: \xfc
+i. \xfd
+s, \xfe
+y: \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.KOI8-R	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+hh \x80
+vv \x81
+dr \x82
+dl \x83
+ur \x84
+ul \x85
+vr \x86
+vl \x87
+dh \x88
+uh \x89
+vh \x8a
+TB \x8b
+LB \x8c
+FB \x8d
+lB \x8e
+RB \x8f
+.S \x90
+:S \x91
+?S \x92
+Iu \x93
+fS \x94
+Sb \x95
+RT \x96
+?2 \x97
+=< \x98
+>= \x99
+NS \x9a
+Il \x9b
+DG \x9c
+2S \x9d
+.M \x9e
+-: \x9f
+HH \xa0
+VV \xa1
+dR \xa2
+io \xa3
+Dr \xa4
+DR \xa5
+dL \xa6
+Dl \xa7
+LD \xa8
+uR \xa9
+Ur \xaa
+UR \xab
+uL \xac
+Ul \xad
+UL \xae
+vR \xaf
+Vr \xb0
+VR \xb1
+vL \xb2
+IO \xb3
+Vl \xb4
+VL \xb5
+dH \xb6
+Dh \xb7
+DH \xb8
+uH \xb9
+Uh \xba
+UH \xbb
+vH \xbc
+Vh \xbd
+VH \xbe
+Co \xbf
+ju \xc0
+a= \xc1
+b= \xc2
+c= \xc3
+d= \xc4
+e= \xc5
+f= \xc6
+g= \xc7
+h= \xc8
+i= \xc9
+j= \xca
+k= \xcb
+l= \xcc
+m= \xcd
+n= \xce
+o= \xcf
+p= \xd0
+ja \xd1
+r= \xd2
+s= \xd3
+t= \xd4
+u= \xd5
+z% \xd6
+v= \xd7
+%' \xd8
+y= \xd9
+z= \xda
+s% \xdb
+je \xdc
+sc \xdd
+c% \xde
+=' \xdf
+JU \xe0
+A= \xe1
+B= \xe2
+C= \xe3
+D= \xe4
+E= \xe5
+F= \xe6
+G= \xe7
+H= \xe8
+I= \xe9
+J= \xea
+K= \xeb
+L= \xec
+M= \xed
+N= \xee
+O= \xef
+P= \xf0
+JA \xf1
+R= \xf2
+S= \xf3
+T= \xf4
+U= \xf5
+Z% \xf6
+V= \xf7
+%" \xf8
+Y= \xf9
+Z= \xfa
+S% \xfb
+JE \xfc
+Sc \xfd
+C% \xfe
+=" \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.KOI8-U	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,174 @@
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+Nb \x23
+DO \x24
+At \x40
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+'! \x60
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+hh \x80
+vv \x81
+dr \x82
+dl \x83
+ur \x84
+ul \x85
+vr \x86
+vl \x87
+dh \x88
+uh \x89
+vh \x8a
+TB \x8b
+LB \x8c
+FB \x8d
+lB \x8e
+RB \x8f
+.S \x90
+:S \x91
+?S \x92
+Iu \x93
+fS \x94
+Sb \x95
+RT \x96
+?2 \x97
+=< \x98
+>= \x99
+NS \x9a
+Il \x9b
+DG \x9c
+2S \x9d
+.M \x9e
+-: \x9f
+HH \xa0
+VV \xa1
+dR \xa2
+io \xa3
+ie \xa4
+DR \xa5
+ii \xa6
+yi \xa7
+LD \xa8
+uR \xa9
+Ur \xaa
+UR \xab
+uL \xac
+g3 \xad
+UL \xae
+vR \xaf
+Vr \xb0
+VR \xb1
+vL \xb2
+IO \xb3
+IE \xb4
+VL \xb5
+II \xb6
+YI \xb7
+DH \xb8
+uH \xb9
+Uh \xba
+UH \xbb
+vH \xbc
+G3 \xbd
+VH \xbe
+Co \xbf
+ju \xc0
+a= \xc1
+b= \xc2
+c= \xc3
+d= \xc4
+e= \xc5
+f= \xc6
+g= \xc7
+h= \xc8
+i= \xc9
+j= \xca
+k= \xcb
+l= \xcc
+m= \xcd
+n= \xce
+o= \xcf
+p= \xd0
+ja \xd1
+r= \xd2
+s= \xd3
+t= \xd4
+u= \xd5
+z% \xd6
+v= \xd7
+%' \xd8
+y= \xd9
+z= \xda
+s% \xdb
+je \xdc
+sc \xdd
+c% \xde
+=' \xdf
+JU \xe0
+A= \xe1
+B= \xe2
+C= \xe3
+D= \xe4
+E= \xe5
+F= \xe6
+G= \xe7
+H= \xe8
+I= \xe9
+J= \xea
+K= \xeb
+L= \xec
+M= \xed
+N= \xee
+O= \xef
+P= \xf0
+JA \xf1
+R= \xf2
+S= \xf3
+T= \xf4
+U= \xf5
+Z% \xf6
+V= \xf7
+%" \xf8
+Y= \xf9
+Z= \xfa
+S% \xfb
+JE \xfc
+Sc \xfd
+C% \xfe
+=" \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/data/map.PT154	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,257 @@
+# Birsh T <birsh@mail.kz>, 2003-12-12
+NU \x00
+SH \x01
+SX \x02
+EX \x03
+ET \x04
+EQ \x05
+AK \x06
+BL \x07
+BS \x08
+HT \x09
+LF \x0a
+VT \x0b
+FF \x0c
+CR \x0d
+SO \x0e
+SI \x0f
+DL \x10
+D1 \x11
+D2 \x12
+D3 \x13
+D4 \x14
+NK \x15
+SY \x16
+EB \x17
+CN \x18
+EM \x19
+SB \x1a
+EC \x1b
+FS \x1c
+GS \x1d
+RS \x1e
+US \x1f
+SP \x20
+! \x21
+" \x22
+Nb \x23
+DO \x24
+% \x25
+& \x26
+' \x27
+( \x28
+) \x29
+* \x2a
++ \x2b
+, \x2c
+- \x2d
+. \x2e
+/ \x2f
+0 \x30
+1 \x31
+2 \x32
+3 \x33
+4 \x34
+5 \x35
+6 \x36
+7 \x37
+8 \x38
+9 \x39
+: \x3a
+; \x3b
+< \x3c
+= \x3d
+> \x3e
+? \x3f
+At \x40
+A \x41
+B \x42
+C \x43
+D \x44
+E \x45
+F \x46
+G \x47
+H \x48
+I \x49
+J \x4a
+K \x4b
+L \x4c
+M \x4d
+N \x4e
+O \x4f
+P \x50
+Q \x51
+R \x52
+S \x53
+T \x54
+U \x55
+V \x56
+W \x57
+X \x58
+Y \x59
+Z \x5a
+<( \x5b
+// \x5c
+)> \x5d
+'> \x5e
+_ \x5f
+'! \x60
+a \x61
+b \x62
+c \x63
+d \x64
+e \x65
+f \x66
+g \x67
+h \x68
+i \x69
+j \x6a
+k \x6b
+l \x6c
+m \x6d
+n \x6e
+o \x6f
+p \x70
+q \x71
+r \x72
+s \x73
+t \x74
+u \x75
+v \x76
+w \x77
+x \x78
+y \x79
+z \x7a
+(! \x7b
+!! \x7c
+!) \x7d
+'? \x7e
+DT \x7f
+Z. \x80
+G- \x81
+U' \x82
+g- \x83
+:9 \x84
+.3 \x85
+C. \x86
+Y" \x87
+H% \x88
+y" \x89
+BK \x8a
+I' \x8b
+N% \x8c
+K% \x8d
+HH \x8e
+C! \x8f
+z. \x90
+'6 \x91
+'9 \x92
+"6 \x93
+"9 \x94
+sb \x95
+-N \x96
+-M \x97
+h% \x98
+c. \x99
+bk \x9a
+i' \x9b
+n% \x9c
+k% \x9d
+hh \x9e
+c! \x9f
+NS \xa0
+V% \xa1
+v% \xa2
+J% \xa3
+O- \xa4
+X% \xa5
+Y- \xa6
+SE \xa7
+IO \xa8
+Co \xa9
+HW \xaa
+<< \xab
+NO \xac
+u' \xad
+Rg \xae
+K! \xaf
+DG \xb0
+y- \xb1
+II \xb2
+ii \xb3
+x% \xb4
+o- \xb5
+PI \xb6
+.M \xb7
+io \xb8
+N0 \xb9
+hw \xba
+>> \xbb
+j% \xbc
+DS \xbd
+ds \xbe
+k! \xbf
+A= \xc0
+B= \xc1
+V= \xc2
+G= \xc3
+D= \xc4
+E= \xc5
+Z% \xc6
+Z= \xc7
+I= \xc8
+J= \xc9
+K= \xca
+L= \xcb
+M= \xcc
+N= \xcd
+O= \xce
+P= \xcf
+R= \xd0
+S= \xd1
+T= \xd2
+U= \xd3
+F= \xd4
+H= \xd5
+C= \xd6
+C% \xd7
+S% \xd8
+Sc \xd9
+=" \xda
+Y= \xdb
+%" \xdc
+JE \xdd
+JU \xde
+JA \xdf
+a= \xe0
+b= \xe1
+v= \xe2
+g= \xe3
+d= \xe4
+e= \xe5
+z% \xe6
+z= \xe7
+i= \xe8
+j= \xe9
+k= \xea
+l= \xeb
+m= \xec
+n= \xed
+o= \xee
+p= \xef
+r= \xf0
+s= \xf1
+t= \xf2
+u= \xf3
+f= \xf4
+h= \xf5
+c= \xf6
+c% \xf7
+s% \xf8
+sc \xf9
+=' \xfa
+y= \xfb
+%' \xfc
+je \xfd
+ju \xfe
+ja \xff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/mkcollate_lex.l	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,285 @@
+%x string name charmap defn nchar subs subs2
+%option noyywrap
+%{
+/*
+ * Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
+ *		at Electronni Visti IA, Kiev, Ukraine.
+ *			All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <ctype.h>
+#include <err.h>
+#include <limits.h>
+#include <unistd.h>
+#include <string.h>
+#include <sysexits.h>
+#include "common.h"
+#include "mkcollate_yacc.tab.h"
+
+int line_no = 1, save_no, fromsubs;
+uchar_t buf[BUFSIZE], *ptr;
+FILE *map_fp;
+YY_BUFFER_STATE main_buf, map_buf;
+#ifdef FLEX_DEBUG
+YYSTYPE yylval;
+#endif /* FLEX_DEBUG */
+int yylex(void);
+%}
+%%
+<INITIAL,charmap,nchar,subs,subs2>[ \t]+      ;
+<subs2>\"               { ptr = buf; BEGIN(string); }
+<subs>\<                { ptr = buf; fromsubs = 1; BEGIN(name); }
+<INITIAL>\<             { ptr = buf; fromsubs = 0; BEGIN(name); }
+^#.*\n			line_no++;
+^\n			line_no++;
+<INITIAL>\\\n           line_no++;
+<INITIAL,nchar,subs>\\t      { yylval.ch = '\t'; return CHAR; }
+<INITIAL,nchar,subs>\\n      { yylval.ch = '\n'; return CHAR; }
+<INITIAL,nchar,subs>\\b      { yylval.ch = '\b'; return CHAR; }
+<INITIAL,nchar,subs>\\f      { yylval.ch = '\f'; return CHAR; }
+<INITIAL,nchar,subs>\\v      { yylval.ch = '\v'; return CHAR; }
+<INITIAL,nchar,subs>\\r      { yylval.ch = '\r'; return CHAR; }
+<INITIAL,nchar,subs>\\a      { yylval.ch = '\a'; return CHAR; }
+<subs2>\n               {
+	line_no++;
+	BEGIN(INITIAL);
+	return '\n';
+}
+<INITIAL,nchar>\n       {
+	line_no++;
+	if (map_fp != NULL) {
+		ptr = buf;
+		BEGIN(defn);
+	}
+	return '\n';
+}
+<INITIAL>[;,{}()]       return *yytext;
+<INITIAL>substitute     { BEGIN(subs); return SUBSTITUTE; }
+<subs>with              { BEGIN(subs2); return WITH; }
+<INITIAL>order          return ORDER;
+<INITIAL>charmap        BEGIN(charmap);
+<INITIAL>;[ \t]*\.\.\.[ \t]*;   return RANGE;
+<INITIAL,nchar,subs>\\[0-7]{3}       {
+	u_int v;
+
+	sscanf(&yytext[1], "%o", &v);
+	yylval.ch = (uchar_t)v;
+	return CHAR;
+}
+<INITIAL,nchar,subs>\\x[0-9a-fA-F]{2}   {
+	u_int v;
+
+	sscanf(&yytext[2], "%x", &v);
+	yylval.ch = (uchar_t)v;
+	return CHAR;
+}
+<INITIAL,nchar,subs>\\. { yylval.ch = yytext[1]; return CHAR; }
+<INITIAL,nchar,subs>.   { yylval.ch = *yytext; return CHAR; }
+<defn>^#.*\n            line_no++;
+<defn>[ \t]+            {
+	if (ptr == buf)
+		errx(EX_UNAVAILABLE, "map expected near line %u of %s",
+		     line_no, map_name);
+	*ptr = '\0';
+	strcpy((char *)yylval.str, (char *)buf);
+	BEGIN(nchar);
+	return DEFN;
+}
+<name>\/\/              {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "name buffer overflow near line %u, character '/'",
+		     line_no);
+	*ptr++ = '/';
+}
+<name>\/\>              {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "name buffer overflow near line %u, character '>'",
+		     line_no);
+	*ptr++ = '>';
+}
+<string>\\\"		{
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\"'",
+		     line_no);
+	*ptr++ = '"';
+}
+<name>\>		{
+	u_int i;
+
+	if (ptr == buf)
+		errx(EX_UNAVAILABLE, "non-empty name expected near line %u",
+		     line_no);
+	*ptr = '\0';
+	for (i = 0; i <= UCHAR_MAX; i++) {
+		if (strcmp((char *)charmap_table[i], (char *)buf) == 0)
+			goto findit;
+	}
+	errx(EX_UNAVAILABLE, "name <%s> not 'charmap'-defined near line %u",
+		buf, line_no);
+ findit:
+	yylval.ch = i;
+	if (fromsubs)
+		BEGIN(subs);
+	else
+		BEGIN(INITIAL);
+	return CHAR;
+}
+<string>\"		{
+	*ptr = '\0';
+	strcpy((char *)yylval.str, (char *)buf);
+	BEGIN(subs2);
+	return STRING;
+}
+<name,defn>.            {
+	const char *s = (map_fp != NULL) ? map_name : "input";
+
+	if (!isascii(*yytext) || !isprint(*yytext))
+		errx(EX_UNAVAILABLE, "non-ASCII or non-printable character 0x%02x not allowed in the map/name near line %u of %s",
+		     *yytext, line_no, s);
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "map/name buffer overflow near line %u of %s, character '%c'",
+		     line_no, s, *yytext);
+	*ptr++ = *yytext;
+}
+<string>\\t             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\t'",
+		     line_no);
+	*ptr++ = '\t';
+}
+<string>\\b             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\b'",
+		     line_no);
+	*ptr++ = '\b';
+}
+<string>\\f             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\f'",
+		     line_no);
+	*ptr++ = '\f';
+}
+<string>\\v             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\v'",
+		     line_no);
+	*ptr++ = '\v';
+}
+<string>\\n             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\n'",
+		     line_no);
+	*ptr++ = '\n';
+}
+<string>\\r             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\r'",
+		     line_no);
+	*ptr++ = '\r';
+}
+<string>\\a             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '\\a'",
+		     line_no);
+	*ptr++ = '\a';
+}
+<name,string,defn>\n            {
+	const char *s = (map_fp != NULL) ? map_name : "input";
+
+	errx(EX_UNAVAILABLE, "unterminated map/name/string near line %u of %s", line_no, s);
+}
+<name,string,nchar><<EOF>>      {
+	const char *s = (map_fp != NULL) ? map_name : "input";
+
+	errx(EX_UNAVAILABLE, "premature EOF in the name/string/char near line %u of %s", line_no, s);
+}
+<string>\\x[0-9a-f]{2}          {
+	u_int v;
+
+	sscanf(&yytext[2], "%x", &v);
+	*ptr++ = (uchar_t)v;
+}
+<string>\\[0-7]{3}              {
+	u_int v;
+
+	sscanf(&yytext[1], "%o", &v);
+	*ptr++ = (uchar_t)v;
+}
+<string>\\.             {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '%c'",
+		     line_no, yytext[1]);
+	*ptr++ = yytext[1];
+}
+<string>.               {
+	if(ptr >= buf + sizeof(buf) - 1)
+		errx(EX_UNAVAILABLE, "string buffer overflow near line %u, character '%c'",
+		     line_no, *yytext);
+	*ptr++ = *yytext;
+}
+<charmap>[^ \t\n]+	{
+	strcat(map_name, "/");
+	strcat(map_name, yytext);
+	if((map_fp = fopen(map_name, "r")) == NULL)
+		err(EX_UNAVAILABLE, "can't open 'charmap' file %s",
+		    map_name);
+	save_no = line_no;
+	line_no = 1;
+	map_buf = yy_new_buffer(map_fp, YY_BUF_SIZE);
+	main_buf = YY_CURRENT_BUFFER;
+	yy_switch_to_buffer(map_buf);
+	ptr = buf;
+	BEGIN(defn);
+}
+<charmap>\n             {
+	errx(EX_UNAVAILABLE, "'charmap' file name expected near line %u",
+	     line_no);
+}
+<charmap><<EOF>>        {
+	errx(EX_UNAVAILABLE, "'charmap' file name expected near line %u",
+	     line_no);
+}
+<INITIAL,defn><<EOF>>                 {
+	if(map_fp != NULL) {
+		if (ptr != buf)
+			errx(EX_UNAVAILABLE, "premature EOF in the map near line %u of %s", line_no, map_name);
+		yy_switch_to_buffer(main_buf);
+		yy_delete_buffer(map_buf);
+		fclose(map_fp);
+		map_fp = NULL;
+		line_no = save_no;
+		BEGIN(INITIAL);
+	} else
+		yyterminate();
+}
+%%
+#ifdef FLEX_DEBUG
+main()
+{
+	while(yylex())
+		;
+	return 0;
+}
+#endif /* FLEX_DEBUG */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/collate/mkcollate_yacc.y	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,381 @@
+%{
+/*
+ * Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua>
+ *		at Electronni Visti IA, Kiev, Ukraine.
+ *			All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <arpa/inet.h>
+#include <err.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sysexits.h>
+#include "collate.h"
+#include "common.h"
+
+extern FILE *yyin;
+void yyerror(const char *fmt, ...);
+int yyparse(void);
+int yylex(void);
+static void usage(void);
+static void collate_print_tables(void);
+
+char map_name[FILENAME_MAX] = ".";
+char curr_chain[STR_LEN];
+
+char __collate_version[STR_LEN];
+u_char charmap_table[UCHAR_MAX + 1][CHARMAP_SYMBOL_LEN];
+
+#undef __collate_substitute_table
+u_char __collate_substitute_table[UCHAR_MAX + 1][STR_LEN];
+#undef __collate_char_pri_table
+struct __collate_st_char_pri __collate_char_pri_table[UCHAR_MAX + 1];
+struct __collate_st_chain_pri *__collate_chain_pri_table;
+
+int chain_index = 0;
+int prim_pri = 1, sec_pri = 1;
+#ifdef COLLATE_DEBUG
+int debug;
+#endif
+
+const char *out_file = "LC_COLLATE";
+%}
+%union {
+	u_char ch;
+	u_char str[BUFSIZE];
+}
+%token SUBSTITUTE WITH ORDER RANGE
+%token <str> STRING
+%token <str> DEFN
+%token <ch> CHAR
+%%
+collate : statment_list
+;
+statment_list : statment
+	| statment_list '\n' statment
+;
+statment :
+	| charmap
+	| substitute
+	| order
+;
+charmap : DEFN CHAR {
+	if (strlen((char *)$1) + 1 > CHARMAP_SYMBOL_LEN)
+		yyerror("Charmap symbol name '%s' is too long", $1);
+	strcpy((char *)charmap_table[$2], (char *)$1);
+}
+;
+substitute : SUBSTITUTE CHAR WITH STRING {
+	if ($2 == '\0')
+		yyerror("NUL character can't be substituted");
+	if (strchr((char *)$4, $2) != NULL)
+		yyerror("Char 0x%02x substitution is recursive", $2);
+	if (strlen((char *)$4) + 1 > STR_LEN)
+		yyerror("Char 0x%02x substitution is too long", $2);
+	strcpy((char *)__collate_substitute_table[$2], (char *)$4);
+}
+;
+order : ORDER order_list {
+	FILE *fp;
+	int ch, substed, ordered;
+	uint32_t u32;
+
+	for (ch = 0; ch < UCHAR_MAX + 1; ch++) {
+		substed = (__collate_substitute_table[ch][0] != ch);
+		ordered = !!__collate_char_pri_table[ch].prim;
+		if (!ordered && !substed)
+			yyerror("Char 0x%02x not found", ch);
+		if (substed && ordered)
+			yyerror("Char 0x%02x can't be ordered since substituted", ch);
+	}
+
+	if ((__collate_chain_pri_table = realloc(__collate_chain_pri_table,
+	     sizeof(*__collate_chain_pri_table) * (chain_index + 1))) == NULL)
+		yyerror("can't grow chain table");
+	(void)memset(&__collate_chain_pri_table[chain_index], 0,
+		     sizeof(__collate_chain_pri_table[0]));
+	chain_index++;
+
+#ifdef COLLATE_DEBUG
+	if (debug)
+		collate_print_tables();
+#endif
+	if ((fp = fopen(out_file, "w")) == NULL)
+		err(EX_UNAVAILABLE, "can't open destination file %s",
+		    out_file);
+
+	strcpy(__collate_version, COLLATE_VERSION1_2);
+	if (fwrite(__collate_version, sizeof(__collate_version), 1, fp) != 1)
+		err(EX_IOERR,
+		"IO error writting collate version to destination file %s",
+		    out_file);
+	u32 = htonl(chain_index);
+	if (fwrite(&u32, sizeof(u32), 1, fp) != 1)
+		err(EX_IOERR,
+		"IO error writting chains number to destination file %s",
+		    out_file);
+	if (fwrite(__collate_substitute_table,
+		   sizeof(__collate_substitute_table), 1, fp) != 1)
+		err(EX_IOERR,
+		"IO error writting substitute table to destination file %s",
+		    out_file);
+	for (ch = 0; ch < UCHAR_MAX + 1; ch++) {
+		__collate_char_pri_table[ch].prim =
+		    htonl(__collate_char_pri_table[ch].prim);
+		__collate_char_pri_table[ch].sec =
+		    htonl(__collate_char_pri_table[ch].sec);
+	}
+	if (fwrite(__collate_char_pri_table,
+		   sizeof(__collate_char_pri_table), 1, fp) != 1)
+		err(EX_IOERR,
+		"IO error writting char table to destination file %s",
+		    out_file);
+	for (ch = 0; ch < chain_index; ch++) {
+		__collate_chain_pri_table[ch].prim =
+		    htonl(__collate_chain_pri_table[ch].prim);
+		__collate_chain_pri_table[ch].sec =
+		    htonl(__collate_chain_pri_table[ch].sec);
+	}
+	if (fwrite(__collate_chain_pri_table,
+		   sizeof(*__collate_chain_pri_table), chain_index, fp) !=
+		   (size_t)chain_index)
+		err(EX_IOERR,
+		"IO error writting chain table to destination file %s",
+		    out_file);
+	if (fclose(fp) != 0)
+		err(EX_IOERR, "IO error closing destination file %s",
+		    out_file);
+	exit(EX_OK);
+}
+;
+order_list : item
+	| order_list ';' item
+;
+chain : CHAR CHAR {
+	curr_chain[0] = $1;
+	curr_chain[1] = $2;
+	if (curr_chain[0] == '\0' || curr_chain[1] == '\0')
+		yyerror("\\0 can't be chained");
+	curr_chain[2] = '\0';
+}
+	| chain CHAR {
+	static char tb[2];
+
+	tb[0] = $2;
+	if (tb[0] == '\0')
+		yyerror("\\0 can't be chained");
+	if (strlen(curr_chain) + 2 > STR_LEN)
+		yyerror("Chain '%s' grows too long", curr_chain);
+	(void)strcat(curr_chain, tb);
+}
+;
+item :  CHAR {
+	if (__collate_char_pri_table[$1].prim)
+		yyerror("Char 0x%02x duplicated", $1);
+	__collate_char_pri_table[$1].prim = prim_pri++;
+}
+	| chain {
+	if ((__collate_chain_pri_table = realloc(__collate_chain_pri_table,
+	     sizeof(*__collate_chain_pri_table) * (chain_index + 1))) == NULL)
+		yyerror("can't grow chain table");
+	(void)memset(&__collate_chain_pri_table[chain_index], 0,
+		     sizeof(__collate_chain_pri_table[0]));
+	(void)strcpy(__collate_chain_pri_table[chain_index].str, curr_chain);
+	__collate_chain_pri_table[chain_index].prim = prim_pri++;
+	chain_index++;
+}
+	| CHAR RANGE CHAR {
+	u_int i;
+
+	if ($3 <= $1)
+		yyerror("Illegal range 0x%02x -- 0x%02x", $1, $3);
+
+	for (i = $1; i <= $3; i++) {
+		if (__collate_char_pri_table[(u_char)i].prim)
+			yyerror("Char 0x%02x duplicated", (u_char)i);
+		__collate_char_pri_table[(u_char)i].prim = prim_pri++;
+	}
+}
+	| '{' prim_order_list '}' {
+	prim_pri++;
+}
+	| '(' sec_order_list ')' {
+	prim_pri++;
+	sec_pri = 1;
+}
+;
+prim_order_list : prim_sub_item
+	| prim_order_list ',' prim_sub_item 
+;
+sec_order_list : sec_sub_item
+	| sec_order_list ',' sec_sub_item 
+;
+prim_sub_item : CHAR {
+	if (__collate_char_pri_table[$1].prim)
+		yyerror("Char 0x%02x duplicated", $1);
+	__collate_char_pri_table[$1].prim = prim_pri;
+}
+	| CHAR RANGE CHAR {
+	u_int i;
+
+	if ($3 <= $1)
+		yyerror("Illegal range 0x%02x -- 0x%02x",
+			$1, $3);
+
+	for (i = $1; i <= $3; i++) {
+		if (__collate_char_pri_table[(u_char)i].prim)
+			yyerror("Char 0x%02x duplicated", (u_char)i);
+		__collate_char_pri_table[(u_char)i].prim = prim_pri;
+	}
+}
+	| chain {
+	if ((__collate_chain_pri_table = realloc(__collate_chain_pri_table,
+	     sizeof(*__collate_chain_pri_table) * (chain_index + 1))) == NULL)
+		yyerror("can't grow chain table");
+	(void)memset(&__collate_chain_pri_table[chain_index], 0,
+		     sizeof(__collate_chain_pri_table[0]));
+	(void)strcpy(__collate_chain_pri_table[chain_index].str, curr_chain);
+	__collate_chain_pri_table[chain_index].prim = prim_pri;
+	chain_index++;
+}
+;
+sec_sub_item : CHAR {
+	if (__collate_char_pri_table[$1].prim)
+		yyerror("Char 0x%02x duplicated", $1);
+	__collate_char_pri_table[$1].prim = prim_pri;
+	__collate_char_pri_table[$1].sec = sec_pri++;
+}
+	| CHAR RANGE CHAR {
+	u_int i;
+
+	if ($3 <= $1)
+		yyerror("Illegal range 0x%02x -- 0x%02x",
+			$1, $3);
+
+	for (i = $1; i <= $3; i++) {
+		if (__collate_char_pri_table[(u_char)i].prim)
+			yyerror("Char 0x%02x duplicated", (u_char)i);
+		__collate_char_pri_table[(u_char)i].prim = prim_pri;
+		__collate_char_pri_table[(u_char)i].sec = sec_pri++;
+	}
+}
+	| chain {
+	if ((__collate_chain_pri_table = realloc(__collate_chain_pri_table,
+	     sizeof(*__collate_chain_pri_table) * (chain_index + 1))) == NULL)
+		yyerror("can't grow chain table");
+	(void)memset(&__collate_chain_pri_table[chain_index], 0,
+		     sizeof(__collate_chain_pri_table[0]));
+	(void)strcpy(__collate_chain_pri_table[chain_index].str, curr_chain);
+	__collate_chain_pri_table[chain_index].prim = prim_pri;
+	__collate_chain_pri_table[chain_index].sec = sec_pri++;
+	chain_index++;
+}
+;
+%%
+int
+main(int ac, char **av)
+{
+	int ch;
+
+#ifdef COLLATE_DEBUG
+	while((ch = getopt(ac, av, ":do:I:")) != -1) {
+#else
+	while((ch = getopt(ac, av, ":o:I:")) != -1) {
+#endif
+		switch (ch)
+		{
+#ifdef COLLATE_DEBUG
+		  case 'd':
+			debug++;
+			break;
+#endif
+		  case 'o':
+			out_file = optarg;
+			break;
+
+		  case 'I':
+			strlcpy(map_name, optarg, sizeof(map_name));
+			break;
+
+		  default:
+			usage();
+		}
+	}
+	ac -= optind;
+	av += optind;
+	if (ac > 0) {
+		if ((yyin = fopen(*av, "r")) == NULL)
+			err(EX_UNAVAILABLE, "can't open source file %s", *av);
+	}
+	for (ch = 0; ch <= UCHAR_MAX; ch++)
+		__collate_substitute_table[ch][0] = ch;
+	yyparse();
+	return 0;
+}
+
+static void
+usage(void)
+{
+	fprintf(stderr, "usage: colldef [-I map_dir] [-o out_file] [filename]\n");
+	exit(EX_USAGE);
+}
+
+void
+yyerror(const char *fmt, ...)
+{
+	va_list ap;
+	char msg[128];
+
+	va_start(ap, fmt);
+	vsnprintf(msg, sizeof(msg), fmt, ap);
+	va_end(ap);
+	errx(EX_UNAVAILABLE, "%s near line %d", msg, line_no);
+}
+
+#ifdef COLLATE_DEBUG
+static void
+collate_print_tables(void)
+{
+	int i;
+
+	printf("Substitute table:\n");
+	for (i = 0; i < UCHAR_MAX + 1; i++)
+	    if (i != *__collate_substitute_table[i])
+		printf("\t'%c' --> \"%s\"\n", i,
+		       __collate_substitute_table[i]);
+	printf("Chain priority table:\n");
+	for (i = 0; i < chain_index - 1; i++)
+		printf("\t\"%s\" : %d %d\n",
+		    __collate_chain_pri_table[i].str,
+		    __collate_chain_pri_table[i].prim,
+		    __collate_chain_pri_table[i].sec);
+	printf("Char priority table:\n");
+	for (i = 0; i < UCHAR_MAX + 1; i++)
+		printf("\t'%c' : %d %d\n", i, __collate_char_pri_table[i].prim,
+		       __collate_char_pri_table[i].sec);
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,91 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+PROG= mkctype
+CATEGORY=LC_CTYPE
+
+include ../Makefile.common
+
+CPPFLAGS += -I$(SRC)/lib/libc/port/locale -D_FILE_OFFSET_BITS=64
+YFLAGS	= -d -b mkctype_yacc
+LFLAGS	= -t
+
+OBJS = $(MACH)/mkctype_lex.o $(MACH)/mkctype_yacc.tab.o
+HDRS = ldef.h extern.h
+CLEANFILES =	mkctype_yacc.tab.c mkctype_yacc.tab.h mkctype_lex.c
+
+en_COMMON =	en_AU en_CA en_GB en_NZ en_US
+
+ASCII =		$(en_COMMON:%=%.US-ASCII)
+
+LATIN1 =	$(en_COMMON:%=%.ISO8859-1)
+
+LATIN15 =	$(en_COMMON:%=%.ISO8859-15)
+
+UTF8 =		$(en_COMMON:%=%.UTF-8) en_IE.UTF-8
+
+.KEEP_STATE:
+
+all: $(MACH)/$(PROG) $(MACHLOCALES)
+
+$(MACH)/$(PROG):	$(OBJS)
+	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
+	$(POST_PROCESS)
+
+$(ASCII:%=$(MACH)/%):	$(MACH)/US-ASCII
+	$(RM) $@
+	$(LN) $(MACH)/US-ASCII $@
+
+$(LATIN1:%=$(MACH)/%):	$(MACH)/ISO8859-1
+	$(RM) $@
+	$(LN) $(MACH)/ISO8859-1 $@
+
+$(LATIN15:%=$(MACH)/%):	$(MACH)/ISO8859-15
+	$(RM) $@
+	$(LN) $(MACH)/ISO8859-15 $@
+
+$(UTF8:%=$(MACH)/%):	$(MACH)/UTF-8
+	$(RM) $@
+	$(LN) $(MACH)/UTF-8 $@
+
+mkctype_lex.c:	mkctype_lex.l	mkctype_yacc.tab.h $(HDRS)
+	$(LEX) $(LFLAGS) mkctype_lex.l > $@
+
+mkctype_yacc.tab.c mkctype_yacc.tab.h:	mkctype_yacc.y $(HDRS)
+	$(YACC) $(YFLAGS) mkctype_yacc.y
+
+clean:
+	$(RM) $(OBJS) $(CLEANFILES)
+	$(RM) -r $(MACH)
+
+#
+# Lint does nothing for us, because yacc and lex outputs are themselves
+# not lint clean.  This is something that it would be good to address.
+#
+lint:
+
+#
+# Likewise, the yacc and lex outputs are not cstyle clean.
+#
+check:
+	$(CSTYLE) -cPp $(HDRS)
+
+
+#
+# Rules for building encoding data files.
+#
+$(MACH)/%: data/%.src $(MACH)/$(PROG)
+	$(MACH)/$(PROG) -o $@ $(@:$(MACH)/%=data/%.src)
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/THIRDPARTYLICENSE	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,33 @@
+Copyright (c) 1993
+	The Regents of the University of California.  All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+Paul Borman at Krystal Technologies.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. All advertising materials mentioning features or use of this software
+   must display the following acknowledgement:
+	This product includes software developed by the University of
+	California, Berkeley and its contributors.
+4. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/THIRDPARTYLICENSE.descrip	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,1 @@
+MKCTYPE UTILITY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/data/ISO8859-1.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,38 @@
+/*
+ * Standard LOCALE_CTYPE for the ISO 8859-1 Locale
+ */
+ENCODING	"NONE"
+VARIABLE        ISO 8859-1 Latin-1 character set
+
+#
+# This is a comment
+#
+ALPHA           'A' - 'Z' 'a' - 'z' 0xc0 - 0xd6 0xd8 - 0xf6 0xf8 - 0xff
+CONTROL		0x00 - 0x1f 0x7f - 0x9f
+DIGIT		'0' - '9'
+GRAPH		0x21 - 0x7e 0xa1 - 0xff
+LOWER           'a' - 'z' 0xdf - 0xf6 0xf8 - 0xff
+PUNCT           0x21 - 0x2f 0x3a - 0x40 0x5b - 0x60 0x7b - 0x7e 0xa1 - 0xbf 0xd7 0xf7
+SPACE           0x09 - 0x0d ' ' 0xa0
+UPPER           'A' - 'Z' 0xc0 - 0xd6 0xd8 - 0xde
+XDIGIT          '0' - '9' 'a' - 'f' 'A' - 'F'
+BLANK		' ' '\t' 0xa0
+PRINT		0x20 - 0x7e 0xa0 - 0xff
+
+MAPLOWER       	<'A' - 'Z' : 'a'>
+MAPLOWER       	<'a' - 'z' : 'a'>
+MAPLOWER        <0xc0 - 0xd6 : 0xe0>
+MAPLOWER        <0xd8 - 0xde : 0xf8>
+MAPLOWER        <0xdf - 0xf6 : 0xdf>
+MAPLOWER        <0xf8 - 0xff : 0xf8>
+
+MAPUPPER       	<'A' - 'Z' : 'A'>
+MAPUPPER       	<'a' - 'z' : 'A'>
+MAPUPPER        <0xc0 - 0xd6 : 0xc0>
+MAPUPPER        <0xd8 - 0xde : 0xd8>
+MAPUPPER        <0xe0 - 0xf6 : 0xc0>
+MAPUPPER        <0xf8 - 0xfe : 0xd8>
+
+TODIGIT       	<'0' - '9' : 0>
+TODIGIT       	<'A' - 'F' : 10>
+TODIGIT       	<'a' - 'f' : 10>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/data/ISO8859-15.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,46 @@
+/*
+ * Standard LOCALE_CTYPE for the ISO 8859-15 Locale
+ */
+ENCODING	"NONE"
+VARIABLE        ISO 8859-15 Latin-9 character set
+
+#
+# This is a comment
+#
+ALPHA		'A' - 'Z' 'a' - 'z' 0xa6 0xa8 0xb4 0xb8 0xbc - 0xbe 0xc0 - 0xd6 0xd8 - 0xf6 0xf8 - 0xff
+CONTROL		0x00 - 0x1f 0x7f - 0x9f
+DIGIT		'0' - '9'
+GRAPH		0x21 - 0x7e 0xa1 - 0xff
+LOWER		'a' - 'z' 0xa8 0xb8 0xbd 0xdf - 0xf6 0xf8 - 0xff
+PUNCT		0x21 - 0x2f 0x3a - 0x40 0x5b - 0x60 0x7b - 0x7e 0xa1 - 0xa5 0xa7 0xa9 - 0xb3 0xb5 - 0xb7 0xb9 - 0xbb 0xbf 0xd7 0xf7
+SPACE		0x09 - 0x0d ' ' 0xa0
+UPPER		'A' - 'Z' 0xa6 0xb4 0xbc 0xbe 0xc0 - 0xd6 0xd8 - 0xde
+XDIGIT		'0' - '9' 'a' - 'f' 'A' - 'F'
+BLANK		' ' '\t' 0xa0
+PRINT		0x20 - 0x7e 0xa0 - 0xff
+
+MAPLOWER	<'A' - 'Z' : 'a'>
+MAPLOWER	<'a' - 'z' : 'a'>
+MAPLOWER	<0xa6 - 0xa6 : 0xa8>
+MAPLOWER	<0xb4 - 0xb4 : 0xb8>
+MAPLOWER	<0xbc - 0xbc : 0xbd>
+MAPLOWER	<0xbe - 0xbe : 0xff>
+MAPLOWER	<0xc0 - 0xd6 : 0xe0>
+MAPLOWER	<0xd8 - 0xde : 0xf8>
+MAPLOWER	<0xdf - 0xf6 : 0xdf>
+MAPLOWER	<0xf8 - 0xff : 0xf8>
+
+MAPUPPER	<'A' - 'Z' : 'A'>
+MAPUPPER	<'a' - 'z' : 'A'>
+MAPUPPER	<0xa8 - 0xa8 : 0xa6>
+MAPUPPER	<0xb8 - 0xb8 : 0xb4>
+MAPUPPER	<0xbd - 0xbd : 0xbc>
+MAPUPPER	<0xc0 - 0xd6 : 0xc0>
+MAPUPPER	<0xd8 - 0xde : 0xd8>
+MAPUPPER	<0xe0 - 0xf6 : 0xc0>
+MAPUPPER	<0xf8 - 0xfe : 0xd8>
+MAPUPPER	<0xff - 0xff : 0xbe>
+
+TODIGIT		<'0' - '9' : 0>
+TODIGIT		<'A' - 'F' : 10>
+TODIGIT		<'a' - 'f' : 10>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/data/US-ASCII.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,27 @@
+/*
+ * Standard LOCALE_CTYPE for the US-ASCII Locale
+ */
+ENCODING        "ASCII"
+VARIABLE        Strict 7bit US-ASCII locale
+
+ALPHA		'A' - 'Z' 'a' - 'z'
+CONTROL		0x00 - 0x1f 0x7f
+DIGIT		'0' - '9'
+GRAPH		0x21 - 0x7e
+LOWER		'a' - 'z'
+PUNCT		0x21 - 0x2f 0x3a - 0x40 0x5b - 0x60 0x7b - 0x7e
+SPACE		0x09 - 0x0d 0x20
+UPPER		'A' - 'Z'
+XDIGIT          '0' - '9' 'a' - 'f' 'A' - 'F'
+BLANK		' ' '\t'
+PRINT		0x20 - 0x7e
+
+MAPLOWER       	<'A' - 'Z' : 'a'>
+MAPLOWER       	<'a' - 'z' : 'a'>
+
+MAPUPPER       	<'A' - 'Z' : 'A'>
+MAPUPPER       	<'a' - 'z' : 'A'>
+
+TODIGIT       	<'0' - '9' : 0>
+TODIGIT       	<'A' - 'F' : 10>
+TODIGIT       	<'a' - 'f' : 10>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/data/UTF-8.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,2398 @@
+/*
+ * Unicode 3.2 ctypes table
+ *
+ * Generated by Hye-Shik Chang <perky@FreeBSD.org>
+ *
+ * WARNING: UCS-4 used here as the internal representation, not UTF-8.
+ * See lib/libc/locale/utf8.c.
+ */
+
+/*
+ * UCD(Unicode Character Database) Terms of Use
+ *
+ * Disclaimer
+ *
+ * The Unicode Character Database is provided as is by Unicode, Inc. No claims
+ * are made as to fitness for any particular purpose. No warranties of any kind
+ * are expressed or implied. The recipient agrees to determine applicability of
+ * information provided. If this file has been purchased on magnetic or optical
+ * media from Unicode, Inc., the sole remedy for any claim will be exchange of
+ * defective media within 90 days of receipt.
+ *
+ * This disclaimer is applicable for all other data files accompanying the
+ * Unicode Character Database, some of which have been compiled by the Unicode
+ * Consortium, and some of which have been supplied by other sources.
+ *
+ * Limitations on Rights to Redistribute This Data
+ *
+ * Recipient is granted the right to make copies in any form for internal
+ * distribution and to freely use the information supplied in the creation of
+ * products supporting the UnicodeTM Standard. The files in the Unicode
+ * Character Database can be redistributed to third parties or other
+ * organizations (whether for profit or not) as long as this notice and the
+ * disclaimer notice are retained. Information can be extracted from these
+ * files and used in documentation or programs, as long as there is an
+ * accompanying notice indicating the source.
+ */
+
+ENCODING	"UTF-8"
+VARIABLE	Unicode 3.2 Character Types
+
+
+/*
+ * U+0000 - U+007F : Basic Latin
+ */
+
+ALPHA     'A' - 'Z'  'a' - 'z'
+CONTROL   0x0000 - 0x001f  0x007f
+DIGIT     '0' - '9'
+GRAPH     0x0021 - 0x007e
+LOWER     'a' - 'z'
+PUNCT     0x0021 - 0x002f  0x003a - 0x0040  0x005b - 0x0060  0x007b - 0x007e
+SPACE     0x0009 - 0x000d  0x0020
+UPPER     'A' - 'Z'
+XDIGIT    '0' - '9'  'A' - 'F'  'a' - 'f'
+BLANK     0x0009  0x000b  0x0020
+PRINT     0x0020 - 0x007e
+SWIDTH1   0x0020 - 0x007e
+
+MAPUPPER  < 'a' - 'z' : 'A' >
+MAPLOWER  < 'A' - 'Z' : 'a' >
+TODIGIT   < '0' - '9' : 0x0000 >
+TODIGIT   < 'A' - 'F' : 10 > < 'a' - 'f' : 10 >
+
+
+/*
+ * U+0080 - U+00FF : Latin-1 Supplement
+ */
+
+ALPHA     0x00aa  0x00b5  0x00ba  0x00c0 - 0x00d6  0x00d8 - 0x00f6
+ALPHA     0x00f8 - 0x00ff
+CONTROL   0x0080 - 0x009f
+GRAPH     0x00a1 - 0x00ff
+LOWER     0x00aa  0x00b5  0x00ba  0x00df - 0x00f6  0x00f8 - 0x00ff
+PUNCT     0x00a1 - 0x00a9  0x00ab - 0x00b1  0x00b4  0x00b6 - 0x00b8
+PUNCT     0x00bb  0x00bf  0x00d7  0x00f7
+SPACE     0x0085  0x00a0
+UPPER     0x00c0 - 0x00d6  0x00d8 - 0x00de
+BLANK     0x00a0
+PRINT     0x00a0 - 0x00ff
+SPECIAL   0x00b2  0x00b3  0x00b9  0x00bc - 0x00be
+SWIDTH1   0x00a0 - 0x00ff
+
+MAPUPPER  < 0x00b5 0x039c >
+MAPUPPER  < 0x00e0 - 0x00f6 : 0x00c0 >
+MAPUPPER  < 0x00f8 - 0x00fe : 0x00d8 >
+MAPUPPER  < 0x00ff 0x0178 >
+MAPLOWER  < 0x00c0 - 0x00d6 : 0x00e0 >
+MAPLOWER  < 0x00d8 - 0x00de : 0x00f8 >
+
+
+/*
+ * U+0100 - U+017F : Latin Extended-A
+ */
+
+ALPHA     0x0100 - 0x017f
+GRAPH     0x0100 - 0x017f
+LOWER     0x0101  0x0103  0x0105  0x0107  0x0109  0x010b  0x010d
+LOWER     0x010f  0x0111  0x0113  0x0115  0x0117  0x0119  0x011b
+LOWER     0x011d  0x011f  0x0121  0x0123  0x0125  0x0127  0x0129
+LOWER     0x012b  0x012d  0x012f  0x0131  0x0133  0x0135  0x0137  0x0138
+LOWER     0x013a  0x013c  0x013e  0x0140  0x0142  0x0144  0x0146
+LOWER     0x0148  0x0149  0x014b  0x014d  0x014f  0x0151  0x0153
+LOWER     0x0155  0x0157  0x0159  0x015b  0x015d  0x015f  0x0161
+LOWER     0x0163  0x0165  0x0167  0x0169  0x016b  0x016d  0x016f
+LOWER     0x0171  0x0173  0x0175  0x0177  0x017a  0x017c  0x017e  0x017f
+UPPER     0x0100  0x0102  0x0104  0x0106  0x0108  0x010a  0x010c
+UPPER     0x010e  0x0110  0x0112  0x0114  0x0116  0x0118  0x011a
+UPPER     0x011c  0x011e  0x0120  0x0122  0x0124  0x0126  0x0128
+UPPER     0x012a  0x012c  0x012e  0x0130  0x0132  0x0134  0x0136
+UPPER     0x0139  0x013b  0x013d  0x013f  0x0141  0x0143  0x0145
+UPPER     0x0147  0x014a  0x014c  0x014e  0x0150  0x0152  0x0154
+UPPER     0x0156  0x0158  0x015a  0x015c  0x015e  0x0160  0x0162
+UPPER     0x0164  0x0166  0x0168  0x016a  0x016c  0x016e  0x0170
+UPPER     0x0172  0x0174  0x0176  0x0178  0x0179  0x017b  0x017d
+PRINT     0x0100 - 0x017f
+SWIDTH1   0x0100 - 0x017f
+
+MAPUPPER  < 0x0101 0x0100 >
+MAPUPPER  < 0x0103 0x0102 >
+MAPUPPER  < 0x0105 0x0104 >
+MAPUPPER  < 0x0107 0x0106 >
+MAPUPPER  < 0x0109 0x0108 >
+MAPUPPER  < 0x010b 0x010a >
+MAPUPPER  < 0x010d 0x010c >
+MAPUPPER  < 0x010f 0x010e >
+MAPUPPER  < 0x0111 0x0110 >
+MAPUPPER  < 0x0113 0x0112 >
+MAPUPPER  < 0x0115 0x0114 >
+MAPUPPER  < 0x0117 0x0116 >
+MAPUPPER  < 0x0119 0x0118 >
+MAPUPPER  < 0x011b 0x011a >
+MAPUPPER  < 0x011d 0x011c >
+MAPUPPER  < 0x011f 0x011e >
+MAPUPPER  < 0x0121 0x0120 >
+MAPUPPER  < 0x0123 0x0122 >
+MAPUPPER  < 0x0125 0x0124 >
+MAPUPPER  < 0x0127 0x0126 >
+MAPUPPER  < 0x0129 0x0128 >
+MAPUPPER  < 0x012b 0x012a >
+MAPUPPER  < 0x012d 0x012c >
+MAPUPPER  < 0x012f 0x012e >
+MAPUPPER  < 0x0131 'I' >
+MAPUPPER  < 0x0133 0x0132 >
+MAPUPPER  < 0x0135 0x0134 >
+MAPUPPER  < 0x0137 0x0136 >
+MAPUPPER  < 0x013a 0x0139 >
+MAPUPPER  < 0x013c 0x013b >
+MAPUPPER  < 0x013e 0x013d >
+MAPUPPER  < 0x0140 0x013f >
+MAPUPPER  < 0x0142 0x0141 >
+MAPUPPER  < 0x0144 0x0143 >
+MAPUPPER  < 0x0146 0x0145 >
+MAPUPPER  < 0x0148 0x0147 >
+MAPUPPER  < 0x014b 0x014a >
+MAPUPPER  < 0x014d 0x014c >
+MAPUPPER  < 0x014f 0x014e >
+MAPUPPER  < 0x0151 0x0150 >
+MAPUPPER  < 0x0153 0x0152 >
+MAPUPPER  < 0x0155 0x0154 >
+MAPUPPER  < 0x0157 0x0156 >
+MAPUPPER  < 0x0159 0x0158 >
+MAPUPPER  < 0x015b 0x015a >
+MAPUPPER  < 0x015d 0x015c >
+MAPUPPER  < 0x015f 0x015e >
+MAPUPPER  < 0x0161 0x0160 >
+MAPUPPER  < 0x0163 0x0162 >
+MAPUPPER  < 0x0165 0x0164 >
+MAPUPPER  < 0x0167 0x0166 >
+MAPUPPER  < 0x0169 0x0168 >
+MAPUPPER  < 0x016b 0x016a >
+MAPUPPER  < 0x016d 0x016c >
+MAPUPPER  < 0x016f 0x016e >
+MAPUPPER  < 0x0171 0x0170 >
+MAPUPPER  < 0x0173 0x0172 >
+MAPUPPER  < 0x0175 0x0174 >
+MAPUPPER  < 0x0177 0x0176 >
+MAPUPPER  < 0x017a 0x0179 >
+MAPUPPER  < 0x017c 0x017b >
+MAPUPPER  < 0x017e 0x017d >
+MAPUPPER  < 0x017f 'S' >
+MAPLOWER  < 0x0100 0x0101 >
+MAPLOWER  < 0x0102 0x0103 >
+MAPLOWER  < 0x0104 0x0105 >
+MAPLOWER  < 0x0106 0x0107 >
+MAPLOWER  < 0x0108 0x0109 >
+MAPLOWER  < 0x010a 0x010b >
+MAPLOWER  < 0x010c 0x010d >
+MAPLOWER  < 0x010e 0x010f >
+MAPLOWER  < 0x0110 0x0111 >
+MAPLOWER  < 0x0112 0x0113 >
+MAPLOWER  < 0x0114 0x0115 >
+MAPLOWER  < 0x0116 0x0117 >
+MAPLOWER  < 0x0118 0x0119 >
+MAPLOWER  < 0x011a 0x011b >
+MAPLOWER  < 0x011c 0x011d >
+MAPLOWER  < 0x011e 0x011f >
+MAPLOWER  < 0x0120 0x0121 >
+MAPLOWER  < 0x0122 0x0123 >
+MAPLOWER  < 0x0124 0x0125 >
+MAPLOWER  < 0x0126 0x0127 >
+MAPLOWER  < 0x0128 0x0129 >
+MAPLOWER  < 0x012a 0x012b >
+MAPLOWER  < 0x012c 0x012d >
+MAPLOWER  < 0x012e 0x012f >
+MAPLOWER  < 0x0130 'i' >
+MAPLOWER  < 0x0132 0x0133 >
+MAPLOWER  < 0x0134 0x0135 >
+MAPLOWER  < 0x0136 0x0137 >
+MAPLOWER  < 0x0139 0x013a >
+MAPLOWER  < 0x013b 0x013c >
+MAPLOWER  < 0x013d 0x013e >
+MAPLOWER  < 0x013f 0x0140 >
+MAPLOWER  < 0x0141 0x0142 >
+MAPLOWER  < 0x0143 0x0144 >
+MAPLOWER  < 0x0145 0x0146 >
+MAPLOWER  < 0x0147 0x0148 >
+MAPLOWER  < 0x014a 0x014b >
+MAPLOWER  < 0x014c 0x014d >
+MAPLOWER  < 0x014e 0x014f >
+MAPLOWER  < 0x0150 0x0151 >
+MAPLOWER  < 0x0152 0x0153 >
+MAPLOWER  < 0x0154 0x0155 >
+MAPLOWER  < 0x0156 0x0157 >
+MAPLOWER  < 0x0158 0x0159 >
+MAPLOWER  < 0x015a 0x015b >
+MAPLOWER  < 0x015c 0x015d >
+MAPLOWER  < 0x015e 0x015f >
+MAPLOWER  < 0x0160 0x0161 >
+MAPLOWER  < 0x0162 0x0163 >
+MAPLOWER  < 0x0164 0x0165 >
+MAPLOWER  < 0x0166 0x0167 >
+MAPLOWER  < 0x0168 0x0169 >
+MAPLOWER  < 0x016a 0x016b >
+MAPLOWER  < 0x016c 0x016d >
+MAPLOWER  < 0x016e 0x016f >
+MAPLOWER  < 0x0170 0x0171 >
+MAPLOWER  < 0x0172 0x0173 >
+MAPLOWER  < 0x0174 0x0175 >
+MAPLOWER  < 0x0176 0x0177 >
+MAPLOWER  < 0x0178 0x00ff >
+MAPLOWER  < 0x0179 0x017a >
+MAPLOWER  < 0x017b 0x017c >
+MAPLOWER  < 0x017d 0x017e >
+
+
+/*
+ * U+0180 - U+024F : Latin Extended-B
+ */
+
+ALPHA     0x0180 - 0x01ba  0x01bc - 0x01bf  0x01c4 - 0x0220  0x0222 - 0x0233
+GRAPH     0x0180 - 0x0220  0x0222 - 0x0233
+LOWER     0x0180  0x0183  0x0185  0x0188  0x018c  0x018d  0x0192
+LOWER     0x0195  0x0199 - 0x019b  0x019e  0x01a1  0x01a3  0x01a5
+LOWER     0x01a8  0x01aa  0x01ab  0x01ad  0x01b0  0x01b4  0x01b6
+LOWER     0x01b9  0x01ba  0x01bd - 0x01bf  0x01c6  0x01c9  0x01cc
+LOWER     0x01ce  0x01d0  0x01d2  0x01d4  0x01d6  0x01d8  0x01da
+LOWER     0x01dc  0x01dd  0x01df  0x01e1  0x01e3  0x01e5  0x01e7
+LOWER     0x01e9  0x01eb  0x01ed  0x01ef  0x01f0  0x01f3  0x01f5
+LOWER     0x01f9  0x01fb  0x01fd  0x01ff  0x0201  0x0203  0x0205
+LOWER     0x0207  0x0209  0x020b  0x020d  0x020f  0x0211  0x0213
+LOWER     0x0215  0x0217  0x0219  0x021b  0x021d  0x021f  0x0223
+LOWER     0x0225  0x0227  0x0229  0x022b  0x022d  0x022f  0x0231
+LOWER     0x0233
+UPPER     0x0181  0x0182  0x0184  0x0186  0x0187  0x0189 - 0x018b
+UPPER     0x018e - 0x0191  0x0193  0x0194  0x0196 - 0x0198  0x019c  0x019d
+UPPER     0x019f  0x01a0  0x01a2  0x01a4  0x01a6  0x01a7  0x01a9
+UPPER     0x01ac  0x01ae  0x01af  0x01b1 - 0x01b3  0x01b5  0x01b7  0x01b8
+UPPER     0x01bc  0x01c4  0x01c7  0x01ca  0x01cd  0x01cf  0x01d1
+UPPER     0x01d3  0x01d5  0x01d7  0x01d9  0x01db  0x01de  0x01e0
+UPPER     0x01e2  0x01e4  0x01e6  0x01e8  0x01ea  0x01ec  0x01ee
+UPPER     0x01f1  0x01f4  0x01f6 - 0x01f8  0x01fa  0x01fc  0x01fe
+UPPER     0x0200  0x0202  0x0204  0x0206  0x0208  0x020a  0x020c
+UPPER     0x020e  0x0210  0x0212  0x0214  0x0216  0x0218  0x021a
+UPPER     0x021c  0x021e  0x0220  0x0222  0x0224  0x0226  0x0228
+UPPER     0x022a  0x022c  0x022e  0x0230  0x0232
+PRINT     0x0180 - 0x0220  0x0222 - 0x0233
+SWIDTH1   0x0180 - 0x0220  0x0222 - 0x0233
+
+MAPUPPER  < 0x0183 0x0182 >
+MAPUPPER  < 0x0185 0x0184 >
+MAPUPPER  < 0x0188 0x0187 >
+MAPUPPER  < 0x018c 0x018b >
+MAPUPPER  < 0x0192 0x0191 >
+MAPUPPER  < 0x0195 0x01f6 >
+MAPUPPER  < 0x0199 0x0198 >
+MAPUPPER  < 0x019e 0x0220 >
+MAPUPPER  < 0x01a1 0x01a0 >
+MAPUPPER  < 0x01a3 0x01a2 >
+MAPUPPER  < 0x01a5 0x01a4 >
+MAPUPPER  < 0x01a8 0x01a7 >
+MAPUPPER  < 0x01ad 0x01ac >
+MAPUPPER  < 0x01b0 0x01af >
+MAPUPPER  < 0x01b4 0x01b3 >
+MAPUPPER  < 0x01b6 0x01b5 >
+MAPUPPER  < 0x01b9 0x01b8 >
+MAPUPPER  < 0x01bd 0x01bc >
+MAPUPPER  < 0x01bf 0x01f7 >
+MAPUPPER  < 0x01c5 0x01c4 >
+MAPUPPER  < 0x01c6 0x01c4 >
+MAPUPPER  < 0x01c8 0x01c7 >
+MAPUPPER  < 0x01c9 0x01c7 >
+MAPUPPER  < 0x01cb 0x01ca >
+MAPUPPER  < 0x01cc 0x01ca >
+MAPUPPER  < 0x01ce 0x01cd >
+MAPUPPER  < 0x01d0 0x01cf >
+MAPUPPER  < 0x01d2 0x01d1 >
+MAPUPPER  < 0x01d4 0x01d3 >
+MAPUPPER  < 0x01d6 0x01d5 >
+MAPUPPER  < 0x01d8 0x01d7 >
+MAPUPPER  < 0x01da 0x01d9 >
+MAPUPPER  < 0x01dc 0x01db >
+MAPUPPER  < 0x01dd 0x018e >
+MAPUPPER  < 0x01df 0x01de >
+MAPUPPER  < 0x01e1 0x01e0 >
+MAPUPPER  < 0x01e3 0x01e2 >
+MAPUPPER  < 0x01e5 0x01e4 >
+MAPUPPER  < 0x01e7 0x01e6 >
+MAPUPPER  < 0x01e9 0x01e8 >
+MAPUPPER  < 0x01eb 0x01ea >
+MAPUPPER  < 0x01ed 0x01ec >
+MAPUPPER  < 0x01ef 0x01ee >
+MAPUPPER  < 0x01f2 0x01f1 >
+MAPUPPER  < 0x01f3 0x01f1 >
+MAPUPPER  < 0x01f5 0x01f4 >
+MAPUPPER  < 0x01f9 0x01f8 >
+MAPUPPER  < 0x01fb 0x01fa >
+MAPUPPER  < 0x01fd 0x01fc >
+MAPUPPER  < 0x01ff 0x01fe >
+MAPUPPER  < 0x0201 0x0200 >
+MAPUPPER  < 0x0203 0x0202 >
+MAPUPPER  < 0x0205 0x0204 >
+MAPUPPER  < 0x0207 0x0206 >
+MAPUPPER  < 0x0209 0x0208 >
+MAPUPPER  < 0x020b 0x020a >
+MAPUPPER  < 0x020d 0x020c >
+MAPUPPER  < 0x020f 0x020e >
+MAPUPPER  < 0x0211 0x0210 >
+MAPUPPER  < 0x0213 0x0212 >
+MAPUPPER  < 0x0215 0x0214 >
+MAPUPPER  < 0x0217 0x0216 >
+MAPUPPER  < 0x0219 0x0218 >
+MAPUPPER  < 0x021b 0x021a >
+MAPUPPER  < 0x021d 0x021c >
+MAPUPPER  < 0x021f 0x021e >
+MAPUPPER  < 0x0223 0x0222 >
+MAPUPPER  < 0x0225 0x0224 >
+MAPUPPER  < 0x0227 0x0226 >
+MAPUPPER  < 0x0229 0x0228 >
+MAPUPPER  < 0x022b 0x022a >
+MAPUPPER  < 0x022d 0x022c >
+MAPUPPER  < 0x022f 0x022e >
+MAPUPPER  < 0x0231 0x0230 >
+MAPUPPER  < 0x0233 0x0232 >
+MAPLOWER  < 0x0181 0x0253 >
+MAPLOWER  < 0x0182 0x0183 >
+MAPLOWER  < 0x0184 0x0185 >
+MAPLOWER  < 0x0186 0x0254 >
+MAPLOWER  < 0x0187 0x0188 >
+MAPLOWER  < 0x0189 - 0x018a : 0x0256 >
+MAPLOWER  < 0x018b 0x018c >
+MAPLOWER  < 0x018e 0x01dd >
+MAPLOWER  < 0x018f 0x0259 >
+MAPLOWER  < 0x0190 0x025b >
+MAPLOWER  < 0x0191 0x0192 >
+MAPLOWER  < 0x0193 0x0260 >
+MAPLOWER  < 0x0194 0x0263 >
+MAPLOWER  < 0x0196 0x0269 >
+MAPLOWER  < 0x0197 0x0268 >
+MAPLOWER  < 0x0198 0x0199 >
+MAPLOWER  < 0x019c 0x026f >
+MAPLOWER  < 0x019d 0x0272 >
+MAPLOWER  < 0x019f 0x0275 >
+MAPLOWER  < 0x01a0 0x01a1 >
+MAPLOWER  < 0x01a2 0x01a3 >
+MAPLOWER  < 0x01a4 0x01a5 >
+MAPLOWER  < 0x01a6 0x0280 >
+MAPLOWER  < 0x01a7 0x01a8 >
+MAPLOWER  < 0x01a9 0x0283 >
+MAPLOWER  < 0x01ac 0x01ad >
+MAPLOWER  < 0x01ae 0x0288 >
+MAPLOWER  < 0x01af 0x01b0 >
+MAPLOWER  < 0x01b1 - 0x01b2 : 0x028a >
+MAPLOWER  < 0x01b3 0x01b4 >
+MAPLOWER  < 0x01b5 0x01b6 >
+MAPLOWER  < 0x01b7 0x0292 >
+MAPLOWER  < 0x01b8 0x01b9 >
+MAPLOWER  < 0x01bc 0x01bd >
+MAPLOWER  < 0x01c4 0x01c6 >
+MAPLOWER  < 0x01c5 0x01c6 >
+MAPLOWER  < 0x01c7 0x01c9 >
+MAPLOWER  < 0x01c8 0x01c9 >
+MAPLOWER  < 0x01ca 0x01cc >
+MAPLOWER  < 0x01cb 0x01cc >
+MAPLOWER  < 0x01cd 0x01ce >
+MAPLOWER  < 0x01cf 0x01d0 >
+MAPLOWER  < 0x01d1 0x01d2 >
+MAPLOWER  < 0x01d3 0x01d4 >
+MAPLOWER  < 0x01d5 0x01d6 >
+MAPLOWER  < 0x01d7 0x01d8 >
+MAPLOWER  < 0x01d9 0x01da >
+MAPLOWER  < 0x01db 0x01dc >
+MAPLOWER  < 0x01de 0x01df >
+MAPLOWER  < 0x01e0 0x01e1 >
+MAPLOWER  < 0x01e2 0x01e3 >
+MAPLOWER  < 0x01e4 0x01e5 >
+MAPLOWER  < 0x01e6 0x01e7 >
+MAPLOWER  < 0x01e8 0x01e9 >
+MAPLOWER  < 0x01ea 0x01eb >
+MAPLOWER  < 0x01ec 0x01ed >
+MAPLOWER  < 0x01ee 0x01ef >
+MAPLOWER  < 0x01f1 0x01f3 >
+MAPLOWER  < 0x01f2 0x01f3 >
+MAPLOWER  < 0x01f4 0x01f5 >
+MAPLOWER  < 0x01f6 0x0195 >
+MAPLOWER  < 0x01f7 0x01bf >
+MAPLOWER  < 0x01f8 0x01f9 >
+MAPLOWER  < 0x01fa 0x01fb >
+MAPLOWER  < 0x01fc 0x01fd >
+MAPLOWER  < 0x01fe 0x01ff >
+MAPLOWER  < 0x0200 0x0201 >
+MAPLOWER  < 0x0202 0x0203 >
+MAPLOWER  < 0x0204 0x0205 >
+MAPLOWER  < 0x0206 0x0207 >
+MAPLOWER  < 0x0208 0x0209 >
+MAPLOWER  < 0x020a 0x020b >
+MAPLOWER  < 0x020c 0x020d >
+MAPLOWER  < 0x020e 0x020f >
+MAPLOWER  < 0x0210 0x0211 >
+MAPLOWER  < 0x0212 0x0213 >
+MAPLOWER  < 0x0214 0x0215 >
+MAPLOWER  < 0x0216 0x0217 >
+MAPLOWER  < 0x0218 0x0219 >
+MAPLOWER  < 0x021a 0x021b >
+MAPLOWER  < 0x021c 0x021d >
+MAPLOWER  < 0x021e 0x021f >
+MAPLOWER  < 0x0220 0x019e >
+MAPLOWER  < 0x0222 0x0223 >
+MAPLOWER  < 0x0224 0x0225 >
+MAPLOWER  < 0x0226 0x0227 >
+MAPLOWER  < 0x0228 0x0229 >
+MAPLOWER  < 0x022a 0x022b >
+MAPLOWER  < 0x022c 0x022d >
+MAPLOWER  < 0x022e 0x022f >
+MAPLOWER  < 0x0230 0x0231 >
+MAPLOWER  < 0x0232 0x0233 >
+
+
+/*
+ * U+0250 - U+02AF : IPA Extensions
+ */
+
+ALPHA     0x0250 - 0x02ad
+GRAPH     0x0250 - 0x02ad
+LOWER     0x0250 - 0x02ad
+PRINT     0x0250 - 0x02ad
+SWIDTH1   0x0250 - 0x02ad
+
+MAPUPPER  < 0x0253 0x0181 >
+MAPUPPER  < 0x0254 0x0186 >
+MAPUPPER  < 0x0256 - 0x0257 : 0x0189 >
+MAPUPPER  < 0x0259 0x018f >
+MAPUPPER  < 0x025b 0x0190 >
+MAPUPPER  < 0x0260 0x0193 >
+MAPUPPER  < 0x0263 0x0194 >
+MAPUPPER  < 0x0268 0x0197 >
+MAPUPPER  < 0x0269 0x0196 >
+MAPUPPER  < 0x026f 0x019c >
+MAPUPPER  < 0x0272 0x019d >
+MAPUPPER  < 0x0275 0x019f >
+MAPUPPER  < 0x0280 0x01a6 >
+MAPUPPER  < 0x0283 0x01a9 >
+MAPUPPER  < 0x0288 0x01ae >
+MAPUPPER  < 0x028a - 0x028b : 0x01b1 >
+MAPUPPER  < 0x0292 0x01b7 >
+
+
+/*
+ * U+02B0 - U+02FF : Spacing Modifier Letters
+ */
+
+GRAPH     0x02b0 - 0x02ee
+PUNCT     0x02b9  0x02ba  0x02c2 - 0x02cf  0x02d2 - 0x02df  0x02e5 - 0x02ed
+PRINT     0x02b0 - 0x02ee
+SWIDTH1   0x02b0 - 0x02ee
+
+
+/*
+ * U+0300 - U+036F : Combining Diacritical Marks
+ */
+
+GRAPH     0x0300 - 0x034E  0x0350 - 0x036f
+PRINT     0x0300 - 0x034E  0x0350 - 0x036f
+SWIDTH0   0x0300 - 0x034E  0x0350 - 0x036f
+
+MAPUPPER  < 0x0345 0x0399 >
+
+
+/*
+ * U+0370 - U+03FF : Greek and Coptic
+ */
+
+ALPHA     0x0386  0x0388 - 0x038a  0x038c  0x038e - 0x03a1  0x03a3 - 0x03ce
+ALPHA     0x03d0 - 0x03f5
+GRAPH     0x0374  0x0375  0x037a  0x037e  0x0384 - 0x038a  0x038c
+GRAPH     0x038e - 0x03a1  0x03a3 - 0x03ce  0x03d0 - 0x03f6
+LOWER     0x0390  0x03ac - 0x03ce  0x03d0  0x03d1  0x03d5 - 0x03d7
+LOWER     0x03d9  0x03db  0x03dd  0x03df  0x03e1  0x03e3  0x03e5
+LOWER     0x03e7  0x03e9  0x03eb  0x03ed  0x03ef - 0x03f3  0x03f5
+PUNCT     0x0374  0x0375  0x037e  0x0384  0x0385  0x0387  0x03f6
+UPPER     0x0386  0x0388 - 0x038a  0x038c  0x038e  0x038f  0x0391 - 0x03a1
+UPPER     0x03a3 - 0x03ab  0x03d2 - 0x03d4  0x03d8  0x03da  0x03dc
+UPPER     0x03de  0x03e0  0x03e2  0x03e4  0x03e6  0x03e8  0x03ea
+UPPER     0x03ec  0x03ee  0x03f4
+PRINT     0x0374  0x0375  0x037a  0x037e  0x0384 - 0x038a  0x038c
+PRINT     0x038e - 0x03a1  0x03a3 - 0x03ce  0x03d0 - 0x03f6
+SWIDTH1   0x0374  0x0375  0x037a  0x037e  0x0384 - 0x038a  0x038c
+SWIDTH1   0x038e - 0x03a1  0x03a3 - 0x03ce  0x03d0 - 0x03f6
+
+MAPUPPER  < 0x03ac 0x0386 >
+MAPUPPER  < 0x03ad - 0x03af : 0x0388 >
+MAPUPPER  < 0x03b1 - 0x03c1 : 0x0391 >
+MAPUPPER  < 0x03c2 0x03a3 >
+MAPUPPER  < 0x03c3 - 0x03cb : 0x03a3 >
+MAPUPPER  < 0x03cc 0x038c >
+MAPUPPER  < 0x03cd - 0x03ce : 0x038e >
+MAPUPPER  < 0x03d0 0x0392 >
+MAPUPPER  < 0x03d1 0x0398 >
+MAPUPPER  < 0x03d5 0x03a6 >
+MAPUPPER  < 0x03d6 0x03a0 >
+MAPUPPER  < 0x03d9 0x03d8 >
+MAPUPPER  < 0x03db 0x03da >
+MAPUPPER  < 0x03dd 0x03dc >
+MAPUPPER  < 0x03df 0x03de >
+MAPUPPER  < 0x03e1 0x03e0 >
+MAPUPPER  < 0x03e3 0x03e2 >
+MAPUPPER  < 0x03e5 0x03e4 >
+MAPUPPER  < 0x03e7 0x03e6 >
+MAPUPPER  < 0x03e9 0x03e8 >
+MAPUPPER  < 0x03eb 0x03ea >
+MAPUPPER  < 0x03ed 0x03ec >
+MAPUPPER  < 0x03ef 0x03ee >
+MAPUPPER  < 0x03f0 0x039a >
+MAPUPPER  < 0x03f1 0x03a1 >
+MAPUPPER  < 0x03f2 0x03a3 >
+MAPUPPER  < 0x03f5 0x0395 >
+MAPLOWER  < 0x0386 0x03ac >
+MAPLOWER  < 0x0388 - 0x038a : 0x03ad >
+MAPLOWER  < 0x038c 0x03cc >
+MAPLOWER  < 0x038e - 0x038f : 0x03cd >
+MAPLOWER  < 0x0391 - 0x03a1 : 0x03b1 >
+MAPLOWER  < 0x03a3 - 0x03ab : 0x03c3 >
+MAPLOWER  < 0x03d8 0x03d9 >
+MAPLOWER  < 0x03da 0x03db >
+MAPLOWER  < 0x03dc 0x03dd >
+MAPLOWER  < 0x03de 0x03df >
+MAPLOWER  < 0x03e0 0x03e1 >
+MAPLOWER  < 0x03e2 0x03e3 >
+MAPLOWER  < 0x03e4 0x03e5 >
+MAPLOWER  < 0x03e6 0x03e7 >
+MAPLOWER  < 0x03e8 0x03e9 >
+MAPLOWER  < 0x03ea 0x03eb >
+MAPLOWER  < 0x03ec 0x03ed >
+MAPLOWER  < 0x03ee 0x03ef >
+MAPLOWER  < 0x03f4 0x03b8 >
+
+
+/*
+ * U+0400 - U+04FF : Cyrillic
+ */
+
+ALPHA     0x0400 - 0x0481  0x048a - 0x04ce  0x04d0 - 0x04f5  0x04f8  0x04f9
+GRAPH     0x0400 - 0x0486  0x0488 - 0x04ce  0x04d0 - 0x04f5  0x04f8  0x04f9
+LOWER     0x0430 - 0x045f  0x0461  0x0463  0x0465  0x0467  0x0469
+LOWER     0x046b  0x046d  0x046f  0x0471  0x0473  0x0475  0x0477
+LOWER     0x0479  0x047b  0x047d  0x047f  0x0481  0x048b  0x048d
+LOWER     0x048f  0x0491  0x0493  0x0495  0x0497  0x0499  0x049b
+LOWER     0x049d  0x049f  0x04a1  0x04a3  0x04a5  0x04a7  0x04a9
+LOWER     0x04ab  0x04ad  0x04af  0x04b1  0x04b3  0x04b5  0x04b7
+LOWER     0x04b9  0x04bb  0x04bd  0x04bf  0x04c2  0x04c4  0x04c6
+LOWER     0x04c8  0x04ca  0x04cc  0x04ce  0x04d1  0x04d3  0x04d5
+LOWER     0x04d7  0x04d9  0x04db  0x04dd  0x04df  0x04e1  0x04e3
+LOWER     0x04e5  0x04e7  0x04e9  0x04eb  0x04ed  0x04ef  0x04f1
+LOWER     0x04f3  0x04f5  0x04f7  0x04f9
+PUNCT     0x0482
+UPPER     0x0400 - 0x042f  0x0460  0x0462  0x0464  0x0466  0x0468
+UPPER     0x046a  0x046c  0x046e  0x0470  0x0472  0x0474  0x0476
+UPPER     0x0478  0x047a  0x047c  0x047e  0x0480  0x048a  0x048c
+UPPER     0x048e  0x0490  0x0492  0x0494  0x0496  0x0498  0x049a
+UPPER     0x049c  0x049e  0x04a0  0x04a2  0x04a4  0x04a6  0x04a8
+UPPER     0x04aa  0x04ac  0x04ae  0x04b0  0x04b2  0x04b4  0x04b6
+UPPER     0x04b8  0x04ba  0x04bc  0x04be  0x04c0  0x04c1  0x04c3
+UPPER     0x04c5  0x04c7  0x04c9  0x04cb  0x04cd  0x04d0  0x04d2
+UPPER     0x04d4  0x04d6  0x04d8  0x04da  0x04dc  0x04de  0x04e0
+UPPER     0x04e2  0x04e4  0x04e6  0x04e8  0x04ea  0x04ec  0x04ee
+UPPER     0x04f0  0x04f2  0x04f4  0x04f6  0x04f8
+PRINT     0x0400 - 0x0486  0x0488 - 0x04ce  0x04d0 - 0x04f9
+SWIDTH0   0x0483 - 0x0486  0x0488 - 0x0489
+SWIDTH1   0x0400 - 0x0482  0x048a - 0x04ce  0x04d0 - 0x04f9
+
+MAPUPPER  < 0x0430 - 0x044f : 0x0410 >
+MAPUPPER  < 0x0450 - 0x045f : 0x0400 >
+MAPUPPER  < 0x0461 0x0460 >
+MAPUPPER  < 0x0463 0x0462 >
+MAPUPPER  < 0x0465 0x0464 >
+MAPUPPER  < 0x0467 0x0466 >
+MAPUPPER  < 0x0469 0x0468 >
+MAPUPPER  < 0x046b 0x046a >
+MAPUPPER  < 0x046d 0x046c >
+MAPUPPER  < 0x046f 0x046e >
+MAPUPPER  < 0x0471 0x0470 >
+MAPUPPER  < 0x0473 0x0472 >
+MAPUPPER  < 0x0475 0x0474 >
+MAPUPPER  < 0x0477 0x0476 >
+MAPUPPER  < 0x0479 0x0478 >
+MAPUPPER  < 0x047b 0x047a >
+MAPUPPER  < 0x047d 0x047c >
+MAPUPPER  < 0x047f 0x047e >
+MAPUPPER  < 0x0481 0x0480 >
+MAPUPPER  < 0x048b 0x048a >
+MAPUPPER  < 0x048d 0x048c >
+MAPUPPER  < 0x048f 0x048e >
+MAPUPPER  < 0x0491 0x0490 >
+MAPUPPER  < 0x0493 0x0492 >
+MAPUPPER  < 0x0495 0x0494 >
+MAPUPPER  < 0x0497 0x0496 >
+MAPUPPER  < 0x0499 0x0498 >
+MAPUPPER  < 0x049b 0x049a >
+MAPUPPER  < 0x049d 0x049c >
+MAPUPPER  < 0x049f 0x049e >
+MAPUPPER  < 0x04a1 0x04a0 >
+MAPUPPER  < 0x04a3 0x04a2 >
+MAPUPPER  < 0x04a5 0x04a4 >
+MAPUPPER  < 0x04a7 0x04a6 >
+MAPUPPER  < 0x04a9 0x04a8 >
+MAPUPPER  < 0x04ab 0x04aa >
+MAPUPPER  < 0x04ad 0x04ac >
+MAPUPPER  < 0x04af 0x04ae >
+MAPUPPER  < 0x04b1 0x04b0 >
+MAPUPPER  < 0x04b3 0x04b2 >
+MAPUPPER  < 0x04b5 0x04b4 >
+MAPUPPER  < 0x04b7 0x04b6 >
+MAPUPPER  < 0x04b9 0x04b8 >
+MAPUPPER  < 0x04bb 0x04ba >
+MAPUPPER  < 0x04bd 0x04bc >
+MAPUPPER  < 0x04bf 0x04be >
+MAPUPPER  < 0x04c2 0x04c1 >
+MAPUPPER  < 0x04c4 0x04c3 >
+MAPUPPER  < 0x04c6 0x04c5 >
+MAPUPPER  < 0x04c8 0x04c7 >
+MAPUPPER  < 0x04ca 0x04c9 >
+MAPUPPER  < 0x04cc 0x04cb >
+MAPUPPER  < 0x04ce 0x04cd >
+MAPUPPER  < 0x04d1 0x04d0 >
+MAPUPPER  < 0x04d3 0x04d2 >
+MAPUPPER  < 0x04d5 0x04d4 >
+MAPUPPER  < 0x04d7 0x04d6 >
+MAPUPPER  < 0x04d9 0x04d8 >
+MAPUPPER  < 0x04db 0x04da >
+MAPUPPER  < 0x04dd 0x04dc >
+MAPUPPER  < 0x04df 0x04de >
+MAPUPPER  < 0x04e1 0x04e0 >
+MAPUPPER  < 0x04e3 0x04e2 >
+MAPUPPER  < 0x04e5 0x04e4 >
+MAPUPPER  < 0x04e7 0x04e6 >
+MAPUPPER  < 0x04e9 0x04e8 >
+MAPUPPER  < 0x04eb 0x04ea >
+MAPUPPER  < 0x04ed 0x04ec >
+MAPUPPER  < 0x04ef 0x04ee >
+MAPUPPER  < 0x04f1 0x04f0 >
+MAPUPPER  < 0x04f3 0x04f2 >
+MAPUPPER  < 0x04f5 0x04f4 >
+MAPUPPER  < 0x04f7 0x04f6 >
+MAPUPPER  < 0x04f9 0x04f8 >
+MAPLOWER  < 0x0400 - 0x040f : 0x0450 >
+MAPLOWER  < 0x0410 - 0x042f : 0x0430 >
+MAPLOWER  < 0x0460 0x0461 >
+MAPLOWER  < 0x0462 0x0463 >
+MAPLOWER  < 0x0464 0x0465 >
+MAPLOWER  < 0x0466 0x0467 >
+MAPLOWER  < 0x0468 0x0469 >
+MAPLOWER  < 0x046a 0x046b >
+MAPLOWER  < 0x046c 0x046d >
+MAPLOWER  < 0x046e 0x046f >
+MAPLOWER  < 0x0470 0x0471 >
+MAPLOWER  < 0x0472 0x0473 >
+MAPLOWER  < 0x0474 0x0475 >
+MAPLOWER  < 0x0476 0x0477 >
+MAPLOWER  < 0x0478 0x0479 >
+MAPLOWER  < 0x047a 0x047b >
+MAPLOWER  < 0x047c 0x047d >
+MAPLOWER  < 0x047e 0x047f >
+MAPLOWER  < 0x0480 0x0481 >
+MAPLOWER  < 0x048a 0x048b >
+MAPLOWER  < 0x048c 0x048d >
+MAPLOWER  < 0x048e 0x048f >
+MAPLOWER  < 0x0490 0x0491 >
+MAPLOWER  < 0x0492 0x0493 >
+MAPLOWER  < 0x0494 0x0495 >
+MAPLOWER  < 0x0496 0x0497 >
+MAPLOWER  < 0x0498 0x0499 >
+MAPLOWER  < 0x049a 0x049b >
+MAPLOWER  < 0x049c 0x049d >
+MAPLOWER  < 0x049e 0x049f >
+MAPLOWER  < 0x04a0 0x04a1 >
+MAPLOWER  < 0x04a2 0x04a3 >
+MAPLOWER  < 0x04a4 0x04a5 >
+MAPLOWER  < 0x04a6 0x04a7 >
+MAPLOWER  < 0x04a8 0x04a9 >
+MAPLOWER  < 0x04aa 0x04ab >
+MAPLOWER  < 0x04ac 0x04ad >
+MAPLOWER  < 0x04ae 0x04af >
+MAPLOWER  < 0x04b0 0x04b1 >
+MAPLOWER  < 0x04b2 0x04b3 >
+MAPLOWER  < 0x04b4 0x04b5 >
+MAPLOWER  < 0x04b6 0x04b7 >
+MAPLOWER  < 0x04b8 0x04b9 >
+MAPLOWER  < 0x04ba 0x04bb >
+MAPLOWER  < 0x04bc 0x04bd >
+MAPLOWER  < 0x04be 0x04bf >
+MAPLOWER  < 0x04c1 0x04c2 >
+MAPLOWER  < 0x04c3 0x04c4 >
+MAPLOWER  < 0x04c5 0x04c6 >
+MAPLOWER  < 0x04c7 0x04c8 >
+MAPLOWER  < 0x04c9 0x04ca >
+MAPLOWER  < 0x04cb 0x04cc >
+MAPLOWER  < 0x04cd 0x04ce >
+MAPLOWER  < 0x04d0 0x04d1 >
+MAPLOWER  < 0x04d2 0x04d3 >
+MAPLOWER  < 0x04d4 0x04d5 >
+MAPLOWER  < 0x04d6 0x04d7 >
+MAPLOWER  < 0x04d8 0x04d9 >
+MAPLOWER  < 0x04da 0x04db >
+MAPLOWER  < 0x04dc 0x04dd >
+MAPLOWER  < 0x04de 0x04df >
+MAPLOWER  < 0x04e0 0x04e1 >
+MAPLOWER  < 0x04e2 0x04e3 >
+MAPLOWER  < 0x04e4 0x04e5 >
+MAPLOWER  < 0x04e6 0x04e7 >
+MAPLOWER  < 0x04e8 0x04e9 >
+MAPLOWER  < 0x04ea 0x04eb >
+MAPLOWER  < 0x04ec 0x04ed >
+MAPLOWER  < 0x04ee 0x04ef >
+MAPLOWER  < 0x04f0 0x04f1 >
+MAPLOWER  < 0x04f2 0x04f3 >
+MAPLOWER  < 0x04f4 0x04f5 >
+MAPLOWER  < 0x04f6 0x04f7 >
+MAPLOWER  < 0x04f8 0x04f9 >
+
+
+/*
+ * U+0500 - U+052F : Cyrillic Supplementary
+ */
+
+ALPHA     0x0500 - 0x050f
+GRAPH     0x0500 - 0x050f
+LOWER     0x0501  0x0503  0x0505  0x0507  0x0509  0x050b  0x050d
+LOWER     0x050f
+UPPER     0x0500  0x0502  0x0504  0x0506  0x0508  0x050a  0x050c
+UPPER     0x050e
+PRINT     0x0500 - 0x050f
+SWIDTH1   0x0500 - 0x050f
+
+MAPUPPER  < 0x0501 0x0500 >
+MAPUPPER  < 0x0503 0x0502 >
+MAPUPPER  < 0x0505 0x0504 >
+MAPUPPER  < 0x0507 0x0506 >
+MAPUPPER  < 0x0509 0x0508 >
+MAPUPPER  < 0x050b 0x050a >
+MAPUPPER  < 0x050d 0x050c >
+MAPUPPER  < 0x050f 0x050e >
+MAPLOWER  < 0x0500 0x0501 >
+MAPLOWER  < 0x0502 0x0503 >
+MAPLOWER  < 0x0504 0x0505 >
+MAPLOWER  < 0x0506 0x0507 >
+MAPLOWER  < 0x0508 0x0509 >
+MAPLOWER  < 0x050a 0x050b >
+MAPLOWER  < 0x050c 0x050d >
+MAPLOWER  < 0x050e 0x050f >
+
+
+/*
+ * U+0530 - U+058F : Armenian
+ */
+
+ALPHA     0x0531 - 0x0556  0x0561 - 0x0587
+GRAPH     0x0531 - 0x0556  0x0559 - 0x055f  0x0561 - 0x0587  0x0589  0x058a
+LOWER     0x0561 - 0x0587
+PUNCT     0x055a - 0x055f  0x0589  0x058a
+UPPER     0x0531 - 0x0556
+PRINT     0x0531 - 0x0556  0x0559 - 0x055f  0x0561 - 0x0587  0x0589  0x058a
+SWIDTH1   0x0531 - 0x0556  0x0559 - 0x055f  0x0561 - 0x0587  0x0589  0x058a
+
+MAPUPPER  < 0x0561 - 0x0586 : 0x0531 >
+MAPLOWER  < 0x0531 - 0x0556 : 0x0561 >
+
+
+/*
+ * U+0590 - U+05FF : Hebrew
+ */
+
+GRAPH     0x0591 - 0x05a1  0x05a3 - 0x05b9  0x05bb - 0x05c4  0x05d0 - 0x05ea
+GRAPH     0x05f0 - 0x05f4
+PUNCT     0x05be  0x05c0  0x05c3  0x05f3  0x05f4
+PRINT     0x0591 - 0x05a1  0x05a3 - 0x05b9  0x05bb - 0x05c4  0x05d0 - 0x05ea
+PRINT     0x05f0 - 0x05f4
+SWIDTH1   0x0591 - 0x05a1  0x05a3 - 0x05b9  0x05bb - 0x05c4  0x05d0 - 0x05ea
+SWIDTH1   0x05f0 - 0x05f4
+
+
+/*
+ * U+0600 - U+06FF : Arabic
+ */
+
+CONTROL   0x06dd
+GRAPH     0x060c  0x061b  0x061f  0x0621 - 0x063a  0x0640 - 0x0655
+GRAPH     0x0660 - 0x06dc  0x06de - 0x06ed  0x06f0 - 0x06fe
+PUNCT     0x060c  0x061b  0x061f  0x066a - 0x066d  0x06d4  0x06e9
+PUNCT     0x06fd  0x06fe
+PRINT     0x060c  0x061b  0x061f  0x0621 - 0x063a  0x0640 - 0x0655
+PRINT     0x0660 - 0x06dc  0x06de - 0x06ed  0x06f0 - 0x06fe
+SWIDTH1   0x060c  0x061b  0x061f  0x0621 - 0x063a  0x0640 - 0x0655
+SWIDTH1   0x0660 - 0x06dc  0x06de - 0x06ed  0x06f0 - 0x06fe
+
+
+/*
+ * U+0700 - U+074F : Syriac
+ */
+
+CONTROL   0x070f
+GRAPH     0x0700 - 0x070d  0x0710 - 0x072c  0x0730 - 0x074a
+PUNCT     0x0700 - 0x070d
+PRINT     0x0700 - 0x070d  0x0710 - 0x072c  0x0730 - 0x074a
+SWIDTH1   0x0700 - 0x070d  0x0710 - 0x072c  0x0730 - 0x074a
+
+
+/*
+ * U+0780 - U+07BF : Thaana
+ */
+
+GRAPH     0x0780 - 0x07b1
+PRINT     0x0780 - 0x07b1
+SWIDTH1   0x0780 - 0x07b1
+
+
+/*
+ * U+0900 - U+097F : Devanagari
+ */
+
+GRAPH     0x0901 - 0x0903  0x0905 - 0x0939  0x093c - 0x094d  0x0950 - 0x0954
+GRAPH     0x0958 - 0x0970
+PUNCT     0x0964  0x0965  0x0970
+PRINT     0x0901 - 0x0903  0x0905 - 0x0939  0x093c - 0x094d  0x0950 - 0x0954
+PRINT     0x0958 - 0x0970
+SWIDTH1   0x0901 - 0x0903  0x0905 - 0x0939  0x093c - 0x094d  0x0950 - 0x0954
+SWIDTH1   0x0958 - 0x0970
+
+
+/*
+ * U+0980 - U+09FF : Bengali
+ */
+
+GRAPH     0x0981 - 0x0983  0x0985 - 0x098c  0x098f  0x0990  0x0993 - 0x09a8
+GRAPH     0x09aa - 0x09b0  0x09b2  0x09b6 - 0x09b9  0x09bc  0x09be - 0x09c4
+GRAPH     0x09c7  0x09c8  0x09cb - 0x09cd  0x09d7  0x09dc  0x09dd
+GRAPH     0x09df - 0x09e3  0x09e6 - 0x09fa
+PUNCT     0x09f2  0x09f3  0x09fa
+PRINT     0x0981 - 0x0983  0x0985 - 0x098c  0x098f  0x0990  0x0993 - 0x09a8
+PRINT     0x09aa - 0x09b0  0x09b2  0x09b6 - 0x09b9  0x09bc  0x09be - 0x09c4
+PRINT     0x09c7  0x09c8  0x09cb - 0x09cd  0x09d7  0x09dc  0x09dd
+PRINT     0x09df - 0x09e3  0x09e6 - 0x09fa
+SPECIAL   0x09f4 - 0x09f9
+SWIDTH1   0x0981 - 0x0983  0x0985 - 0x098c  0x098f  0x0990  0x0993 - 0x09a8
+SWIDTH1   0x09aa - 0x09b0  0x09b2  0x09b6 - 0x09b9  0x09bc  0x09be - 0x09c4
+SWIDTH1   0x09c7  0x09c8  0x09cb - 0x09cd  0x09d7  0x09dc  0x09dd
+SWIDTH1   0x09df - 0x09e3  0x09e6 - 0x09fa
+
+
+/*
+ * U+0A00 - U+0A7F : Gurmukhi
+ */
+
+GRAPH     0x0a02  0x0a05 - 0x0a0a  0x0a0f  0x0a10  0x0a13 - 0x0a28
+GRAPH     0x0a2a - 0x0a30  0x0a32  0x0a33  0x0a35  0x0a36  0x0a38  0x0a39
+GRAPH     0x0a3c  0x0a3e - 0x0a42  0x0a47  0x0a48  0x0a4b - 0x0a4d
+GRAPH     0x0a59 - 0x0a5c  0x0a5e  0x0a66 - 0x0a74
+PRINT     0x0a02  0x0a05 - 0x0a0a  0x0a0f  0x0a10  0x0a13 - 0x0a28
+PRINT     0x0a2a - 0x0a30  0x0a32  0x0a33  0x0a35  0x0a36  0x0a38  0x0a39
+PRINT     0x0a3c  0x0a3e - 0x0a42  0x0a47  0x0a48  0x0a4b - 0x0a4d
+PRINT     0x0a59 - 0x0a5c  0x0a5e  0x0a66 - 0x0a74
+SWIDTH1   0x0a02  0x0a05 - 0x0a0a  0x0a0f  0x0a10  0x0a13 - 0x0a28
+SWIDTH1   0x0a2a - 0x0a30  0x0a32  0x0a33  0x0a35  0x0a36  0x0a38  0x0a39
+SWIDTH1   0x0a3c  0x0a3e - 0x0a42  0x0a47  0x0a48  0x0a4b - 0x0a4d
+SWIDTH1   0x0a59 - 0x0a5c  0x0a5e  0x0a66 - 0x0a74
+
+
+/*
+ * U+0A80 - U+0AFF : Gujarati
+ */
+
+GRAPH     0x0a81 - 0x0a83  0x0a85 - 0x0a8b  0x0a8d  0x0a8f - 0x0a91
+GRAPH     0x0a93 - 0x0aa8  0x0aaa - 0x0ab0  0x0ab2  0x0ab3  0x0ab5 - 0x0ab9
+GRAPH     0x0abc - 0x0ac5  0x0ac7 - 0x0ac9  0x0acb - 0x0acd  0x0ad0
+GRAPH     0x0ae0  0x0ae6 - 0x0aef
+PRINT     0x0a81 - 0x0a83  0x0a85 - 0x0a8b  0x0a8d  0x0a8f - 0x0a91
+PRINT     0x0a93 - 0x0aa8  0x0aaa - 0x0ab0  0x0ab2  0x0ab3  0x0ab5 - 0x0ab9
+PRINT     0x0abc - 0x0ac5  0x0ac7 - 0x0ac9  0x0acb - 0x0acd  0x0ad0
+PRINT     0x0ae0  0x0ae6 - 0x0aef
+SWIDTH1   0x0a81 - 0x0a83  0x0a85 - 0x0a8b  0x0a8d  0x0a8f - 0x0a91
+SWIDTH1   0x0a93 - 0x0aa8  0x0aaa - 0x0ab0  0x0ab2  0x0ab3  0x0ab5 - 0x0ab9
+SWIDTH1   0x0abc - 0x0ac5  0x0ac7 - 0x0ac9  0x0acb - 0x0acd  0x0ad0
+SWIDTH1   0x0ae0  0x0ae6 - 0x0aef
+
+
+/*
+ * U+0B00 - U+0B7F : Oriya
+ */
+
+GRAPH     0x0b01 - 0x0b03  0x0b05 - 0x0b0c  0x0b0f  0x0b10  0x0b13 - 0x0b28
+GRAPH     0x0b2a - 0x0b30  0x0b32  0x0b33  0x0b36 - 0x0b39  0x0b3c - 0x0b43
+GRAPH     0x0b47  0x0b48  0x0b4b - 0x0b4d  0x0b56  0x0b57  0x0b5c  0x0b5d
+GRAPH     0x0b5f - 0x0b61  0x0b66 - 0x0b70
+PUNCT     0x0b70
+PRINT     0x0b01 - 0x0b03  0x0b05 - 0x0b0c  0x0b0f  0x0b10  0x0b13 - 0x0b28
+PRINT     0x0b2a - 0x0b30  0x0b32  0x0b33  0x0b36 - 0x0b39  0x0b3c - 0x0b43
+PRINT     0x0b47  0x0b48  0x0b4b - 0x0b4d  0x0b56  0x0b57  0x0b5c  0x0b5d
+PRINT     0x0b5f - 0x0b61  0x0b66 - 0x0b70
+SWIDTH1   0x0b01 - 0x0b03  0x0b05 - 0x0b0c  0x0b0f  0x0b10  0x0b13 - 0x0b28
+SWIDTH1   0x0b2a - 0x0b30  0x0b32  0x0b33  0x0b36 - 0x0b39  0x0b3c - 0x0b43
+SWIDTH1   0x0b47  0x0b48  0x0b4b - 0x0b4d  0x0b56  0x0b57  0x0b5c  0x0b5d
+SWIDTH1   0x0b5f - 0x0b61  0x0b66 - 0x0b70
+
+
+/*
+ * U+0B80 - U+0BFF : Tamil
+ */
+
+GRAPH     0x0b82  0x0b83  0x0b85 - 0x0b8a  0x0b8e - 0x0b90  0x0b92 - 0x0b95
+GRAPH     0x0b99  0x0b9a  0x0b9c  0x0b9e  0x0b9f  0x0ba3  0x0ba4
+GRAPH     0x0ba8 - 0x0baa  0x0bae - 0x0bb5  0x0bb7 - 0x0bb9  0x0bbe - 0x0bc2
+GRAPH     0x0bc6 - 0x0bc8  0x0bca - 0x0bcd  0x0bd7  0x0be7 - 0x0bf2
+PRINT     0x0b82  0x0b83  0x0b85 - 0x0b8a  0x0b8e - 0x0b90  0x0b92 - 0x0b95
+PRINT     0x0b99  0x0b9a  0x0b9c  0x0b9e  0x0b9f  0x0ba3  0x0ba4
+PRINT     0x0ba8 - 0x0baa  0x0bae - 0x0bb5  0x0bb7 - 0x0bb9  0x0bbe - 0x0bc2
+PRINT     0x0bc6 - 0x0bc8  0x0bca - 0x0bcd  0x0bd7  0x0be7 - 0x0bf2
+SPECIAL   0x0bf0 - 0x0bf2
+SWIDTH1   0x0b82  0x0b83  0x0b85 - 0x0b8a  0x0b8e - 0x0b90  0x0b92 - 0x0b95
+SWIDTH1   0x0b99  0x0b9a  0x0b9c  0x0b9e  0x0b9f  0x0ba3  0x0ba4
+SWIDTH1   0x0ba8 - 0x0baa  0x0bae - 0x0bb5  0x0bb7 - 0x0bb9  0x0bbe - 0x0bc2
+SWIDTH1   0x0bc6 - 0x0bc8  0x0bca - 0x0bcd  0x0bd7  0x0be7 - 0x0bf2
+
+
+/*
+ * U+0C00 - U+0C7F : Telugu
+ */
+
+GRAPH     0x0c01 - 0x0c03  0x0c05 - 0x0c0c  0x0c0e - 0x0c10  0x0c12 - 0x0c28
+GRAPH     0x0c2a - 0x0c33  0x0c35 - 0x0c39  0x0c3e - 0x0c44  0x0c46 - 0x0c48
+GRAPH     0x0c4a - 0x0c4d  0x0c55  0x0c56  0x0c60  0x0c61  0x0c66 - 0x0c6f
+PRINT     0x0c01 - 0x0c03  0x0c05 - 0x0c0c  0x0c0e - 0x0c10  0x0c12 - 0x0c28
+PRINT     0x0c2a - 0x0c33  0x0c35 - 0x0c39  0x0c3e - 0x0c44  0x0c46 - 0x0c48
+PRINT     0x0c4a - 0x0c4d  0x0c55  0x0c56  0x0c60  0x0c61  0x0c66 - 0x0c6f
+SWIDTH1   0x0c01 - 0x0c03  0x0c05 - 0x0c0c  0x0c0e - 0x0c10  0x0c12 - 0x0c28
+SWIDTH1   0x0c2a - 0x0c33  0x0c35 - 0x0c39  0x0c3e - 0x0c44  0x0c46 - 0x0c48
+SWIDTH1   0x0c4a - 0x0c4d  0x0c55  0x0c56  0x0c60  0x0c61  0x0c66 - 0x0c6f
+
+
+/*
+ * U+0C80 - U+0CFF : Kannada
+ */
+
+GRAPH     0x0c82  0x0c83  0x0c85 - 0x0c8c  0x0c8e - 0x0c90  0x0c92 - 0x0ca8
+GRAPH     0x0caa - 0x0cb3  0x0cb5 - 0x0cb9  0x0cbe - 0x0cc4  0x0cc6 - 0x0cc8
+GRAPH     0x0cca - 0x0ccd  0x0cd5  0x0cd6  0x0cde  0x0ce0  0x0ce1
+GRAPH     0x0ce6 - 0x0cef
+PRINT     0x0c82  0x0c83  0x0c85 - 0x0c8c  0x0c8e - 0x0c90  0x0c92 - 0x0ca8
+PRINT     0x0caa - 0x0cb3  0x0cb5 - 0x0cb9  0x0cbe - 0x0cc4  0x0cc6 - 0x0cc8
+PRINT     0x0cca - 0x0ccd  0x0cd5  0x0cd6  0x0cde  0x0ce0  0x0ce1
+PRINT     0x0ce6 - 0x0cef
+SWIDTH1   0x0c82  0x0c83  0x0c85 - 0x0c8c  0x0c8e - 0x0c90  0x0c92 - 0x0ca8
+SWIDTH1   0x0caa - 0x0cb3  0x0cb5 - 0x0cb9  0x0cbe - 0x0cc4  0x0cc6 - 0x0cc8
+SWIDTH1   0x0cca - 0x0ccd  0x0cd5  0x0cd6  0x0cde  0x0ce0  0x0ce1
+SWIDTH1   0x0ce6 - 0x0cef
+
+
+/*
+ * U+0D00 - U+0D7F : Malayalam
+ */
+
+GRAPH     0x0d02  0x0d03  0x0d05 - 0x0d0c  0x0d0e - 0x0d10  0x0d12 - 0x0d28
+GRAPH     0x0d2a - 0x0d39  0x0d3e - 0x0d43  0x0d46 - 0x0d48  0x0d4a - 0x0d4d
+GRAPH     0x0d57  0x0d60  0x0d61  0x0d66 - 0x0d6f
+PRINT     0x0d02  0x0d03  0x0d05 - 0x0d0c  0x0d0e - 0x0d10  0x0d12 - 0x0d28
+PRINT     0x0d2a - 0x0d39  0x0d3e - 0x0d43  0x0d46 - 0x0d48  0x0d4a - 0x0d4d
+PRINT     0x0d57  0x0d60  0x0d61  0x0d66 - 0x0d6f
+SWIDTH1   0x0d02  0x0d03  0x0d05 - 0x0d0c  0x0d0e - 0x0d10  0x0d12 - 0x0d28
+SWIDTH1   0x0d2a - 0x0d39  0x0d3e - 0x0d43  0x0d46 - 0x0d48  0x0d4a - 0x0d4d
+SWIDTH1   0x0d57  0x0d60  0x0d61  0x0d66 - 0x0d6f
+
+
+/*
+ * U+0D80 - U+0DFF : Sinhala
+ */
+
+GRAPH     0x0d82  0x0d83  0x0d85 - 0x0d96  0x0d9a - 0x0db1  0x0db3 - 0x0dbb
+GRAPH     0x0dbd  0x0dc0 - 0x0dc6  0x0dca  0x0dcf - 0x0dd4  0x0dd6
+GRAPH     0x0dd8 - 0x0ddf  0x0df2 - 0x0df4
+PUNCT     0x0df4
+PRINT     0x0d82  0x0d83  0x0d85 - 0x0d96  0x0d9a - 0x0db1  0x0db3 - 0x0dbb
+PRINT     0x0dbd  0x0dc0 - 0x0dc6  0x0dca  0x0dcf - 0x0dd4  0x0dd6
+PRINT     0x0dd8 - 0x0ddf  0x0df2 - 0x0df4
+SWIDTH1   0x0d82  0x0d83  0x0d85 - 0x0d96  0x0d9a - 0x0db1  0x0db3 - 0x0dbb
+SWIDTH1   0x0dbd  0x0dc0 - 0x0dc6  0x0dca  0x0dcf - 0x0dd4  0x0dd6
+SWIDTH1   0x0dd8 - 0x0ddf  0x0df2 - 0x0df4
+
+
+/*
+ * U+0E00 - U+0E7F : Thai
+ */
+
+GRAPH     0x0e01 - 0x0e3a  0x0e3f - 0x0e5b
+PUNCT     0x0e3f  0x0e4f  0x0e5a  0x0e5b
+PRINT     0x0e01 - 0x0e3a  0x0e3f - 0x0e5b
+SWIDTH0   0x0e31   0x0e34 - 0x0e3a  0x0e47 - 0x0e4e
+SWIDTH1   0x0e01 - 0x0e30  0x0e32 - 0x0e33  0x0e3f - 0x0e46  0x0e4f - 0x0e5b
+
+
+/*
+ * U+0E80 - U+0EFF : Lao
+ */
+
+GRAPH     0x0e81  0x0e82  0x0e84  0x0e87  0x0e88  0x0e8a  0x0e8d
+GRAPH     0x0e94 - 0x0e97  0x0e99 - 0x0e9f  0x0ea1 - 0x0ea3  0x0ea5
+GRAPH     0x0ea7  0x0eaa  0x0eab  0x0ead - 0x0eb9  0x0ebb - 0x0ebd
+GRAPH     0x0ec0 - 0x0ec4  0x0ec6  0x0ec8 - 0x0ecd  0x0ed0 - 0x0ed9
+GRAPH     0x0edc  0x0edd
+PRINT     0x0e81  0x0e82  0x0e84  0x0e87  0x0e88  0x0e8a  0x0e8d
+PRINT     0x0e94 - 0x0e97  0x0e99 - 0x0e9f  0x0ea1 - 0x0ea3  0x0ea5
+PRINT     0x0ea7  0x0eaa  0x0eab  0x0ead - 0x0eb9  0x0ebb - 0x0ebd
+PRINT     0x0ec0 - 0x0ec4  0x0ec6  0x0ec8 - 0x0ecd  0x0ed0 - 0x0ed9
+PRINT     0x0edc  0x0edd
+SWIDTH1   0x0e81  0x0e82  0x0e84  0x0e87  0x0e88  0x0e8a  0x0e8d
+SWIDTH1   0x0e94 - 0x0e97  0x0e99 - 0x0e9f  0x0ea1 - 0x0ea3  0x0ea5
+SWIDTH1   0x0ea7  0x0eaa  0x0eab  0x0ead - 0x0eb9  0x0ebb - 0x0ebd
+SWIDTH1   0x0ec0 - 0x0ec4  0x0ec6  0x0ec8 - 0x0ecd  0x0ed0 - 0x0ed9
+SWIDTH1   0x0edc  0x0edd
+
+
+/*
+ * U+0F00 - U+0FFF : Tibetan
+ */
+
+GRAPH     0x0f00 - 0x0f47  0x0f49 - 0x0f6a  0x0f71 - 0x0f8b  0x0f90 - 0x0f97
+GRAPH     0x0f99 - 0x0fbc  0x0fbe - 0x0fcc  0x0fcf
+PUNCT     0x0f01 - 0x0f17  0x0f1a - 0x0f1f  0x0f34  0x0f36  0x0f38
+PUNCT     0x0f3a - 0x0f3d  0x0f85  0x0fbe - 0x0fc5  0x0fc7 - 0x0fcc
+PUNCT     0x0fcf
+PRINT     0x0f00 - 0x0f47  0x0f49 - 0x0f6a  0x0f71 - 0x0f8b  0x0f90 - 0x0f97
+PRINT     0x0f99 - 0x0fbc  0x0fbe - 0x0fcc  0x0fcf
+SPECIAL   0x0f2a - 0x0f33
+PHONOGRAM 0x0f00
+SWIDTH1   0x0f00 - 0x0f47  0x0f49 - 0x0f6a  0x0f71 - 0x0f8b  0x0f90 - 0x0f97
+SWIDTH1   0x0f99 - 0x0fbc  0x0fbe - 0x0fcc  0x0fcf
+
+
+/*
+ * U+1000 - U+109F : Myanmar
+ */
+
+GRAPH     0x1000 - 0x1021  0x1023 - 0x1027  0x1029  0x102a  0x102c - 0x1032
+GRAPH     0x1036 - 0x1039  0x1040 - 0x1059
+PUNCT     0x104a - 0x104f
+PRINT     0x1000 - 0x1021  0x1023 - 0x1027  0x1029  0x102a  0x102c - 0x1032
+PRINT     0x1036 - 0x1039  0x1040 - 0x1059
+SWIDTH1   0x1000 - 0x1021  0x1023 - 0x1027  0x1029  0x102a  0x102c - 0x1032
+SWIDTH1   0x1036 - 0x1039  0x1040 - 0x1059
+
+
+/*
+ * U+10A0 - U+10FF : Georgian
+ */
+
+ALPHA     0x10a0 - 0x10c5
+GRAPH     0x10a0 - 0x10c5  0x10d0 - 0x10f8  0x10fb
+PUNCT     0x10fb
+UPPER     0x10a0 - 0x10c5
+PRINT     0x10a0 - 0x10c5  0x10d0 - 0x10f8  0x10fb
+SWIDTH1   0x10a0 - 0x10c5  0x10d0 - 0x10f8  0x10fb
+
+
+/*
+ * U+1100 - U+11FF : Hangul Jamo
+ */
+
+GRAPH     0x1100 - 0x1159  0x115f - 0x11a2  0x11a8 - 0x11f9
+PRINT     0x1100 - 0x1159  0x115f - 0x11a2  0x11a8 - 0x11f9
+SWIDTH1   0x1160 - 0x11a2  0x11a8 - 0x11f9
+SWIDTH2   0x1100 - 0x1159  0x115f
+
+
+/*
+ * U+1200 - U+137F : Ethiopic
+ */
+
+GRAPH     0x1200 - 0x1206  0x1208 - 0x1246  0x1248  0x124a - 0x124d
+GRAPH     0x1250 - 0x1256  0x1258  0x125a - 0x125d  0x1260 - 0x1286
+GRAPH     0x1288  0x128a - 0x128d  0x1290 - 0x12ae  0x12b0  0x12b2 - 0x12b5
+GRAPH     0x12b8 - 0x12be  0x12c0  0x12c2 - 0x12c5  0x12c8 - 0x12ce
+GRAPH     0x12d0 - 0x12d6  0x12d8 - 0x12ee  0x12f0 - 0x130e  0x1310
+GRAPH     0x1312 - 0x1315  0x1318 - 0x131e  0x1320 - 0x1346  0x1348 - 0x135a
+GRAPH     0x1361 - 0x137c
+PUNCT     0x1361 - 0x1368
+PRINT     0x1200 - 0x1206  0x1208 - 0x1246  0x1248  0x124a - 0x124d
+PRINT     0x1250 - 0x1256  0x1258  0x125a - 0x125d  0x1260 - 0x1286
+PRINT     0x1288  0x128a - 0x128d  0x1290 - 0x12ae  0x12b0  0x12b2 - 0x12b5
+PRINT     0x12b8 - 0x12be  0x12c0  0x12c2 - 0x12c5  0x12c8 - 0x12ce
+PRINT     0x12d0 - 0x12d6  0x12d8 - 0x12ee  0x12f0 - 0x130e  0x1310
+PRINT     0x1312 - 0x1315  0x1318 - 0x131e  0x1320 - 0x1346  0x1348 - 0x135a
+PRINT     0x1361 - 0x137c
+SPECIAL   0x1372 - 0x137c
+PHONOGRAM 0x1200 - 0x1206  0x1208 - 0x1246  0x1248  0x124a - 0x124d
+PHONOGRAM 0x1250 - 0x1256  0x1258  0x125a - 0x125d  0x1260 - 0x1286
+PHONOGRAM 0x1288  0x128a - 0x128d  0x1290 - 0x12ae  0x12b0  0x12b2 - 0x12b5
+PHONOGRAM 0x12b8 - 0x12be  0x12c0  0x12c2 - 0x12c5  0x12c8 - 0x12ce
+PHONOGRAM 0x12d0 - 0x12d6  0x12d8 - 0x12ee  0x12f0 - 0x130e  0x1310
+PHONOGRAM 0x1312 - 0x1315  0x1318 - 0x131e  0x1320 - 0x1346  0x1348 - 0x135a
+SWIDTH1   0x1200 - 0x1206  0x1208 - 0x1246  0x1248  0x124a - 0x124d
+SWIDTH1   0x1250 - 0x1256  0x1258  0x125a - 0x125d  0x1260 - 0x1286
+SWIDTH1   0x1288  0x128a - 0x128d  0x1290 - 0x12ae  0x12b0  0x12b2 - 0x12b5
+SWIDTH1   0x12b8 - 0x12be  0x12c0  0x12c2 - 0x12c5  0x12c8 - 0x12ce
+SWIDTH1   0x12d0 - 0x12d6  0x12d8 - 0x12ee  0x12f0 - 0x130e  0x1310
+SWIDTH1   0x1312 - 0x1315  0x1318 - 0x131e  0x1320 - 0x1346  0x1348 - 0x135a
+SWIDTH1   0x1361 - 0x137c
+
+
+/*
+ * U+13A0 - U+13FF : Cherokee
+ */
+
+GRAPH     0x13a0 - 0x13f4
+PRINT     0x13a0 - 0x13f4
+SWIDTH1   0x13a0 - 0x13f4
+
+
+/*
+ * U+1400 - U+167F : Unified Canadian Aboriginal Syllabics
+ */
+
+GRAPH     0x1401 - 0x1676
+PUNCT     0x166d  0x166e
+PRINT     0x1401 - 0x1676
+PHONOGRAM 0x1401 - 0x166c  0x166f - 0x1676
+SWIDTH1   0x1401 - 0x1676
+
+
+/*
+ * U+1680 - U+169F : Ogham
+ */
+
+GRAPH     0x1681 - 0x169c
+PUNCT     0x169b  0x169c
+SPACE     0x1680
+BLANK     0x1680
+PRINT     0x1680 - 0x169c
+SWIDTH1   0x1680 - 0x169c
+
+
+/*
+ * U+16A0 - U+16FF : Runic
+ */
+
+GRAPH     0x16a0 - 0x16f0
+PUNCT     0x16eb - 0x16ed
+PRINT     0x16a0 - 0x16f0
+SPECIAL   0x16ee - 0x16f0
+SWIDTH1   0x16a0 - 0x16f0
+
+
+/*
+ * U+1700 - U+171F : Tagalog
+ */
+
+GRAPH     0x1700 - 0x170c  0x170e - 0x1714
+PRINT     0x1700 - 0x170c  0x170e - 0x1714
+SWIDTH1   0x1700 - 0x170c  0x170e - 0x1714
+
+
+/*
+ * U+1720 - U+173F : Hanunoo
+ */
+
+GRAPH     0x1720 - 0x1736
+PUNCT     0x1735  0x1736
+PRINT     0x1720 - 0x1736
+SWIDTH1   0x1720 - 0x1736
+
+
+/*
+ * U+1740 - U+175F : Buhid
+ */
+
+GRAPH     0x1740 - 0x1753
+PRINT     0x1740 - 0x1753
+SWIDTH1   0x1740 - 0x1753
+
+
+/*
+ * U+1760 - U+177F : Tagbanwa
+ */
+
+GRAPH     0x1760 - 0x176c  0x176e - 0x1770  0x1772  0x1773
+PRINT     0x1760 - 0x176c  0x176e - 0x1770  0x1772  0x1773
+SWIDTH1   0x1760 - 0x176c  0x176e - 0x1770  0x1772  0x1773
+
+
+/*
+ * U+1780 - U+17FF : Khmer
+ */
+
+GRAPH     0x1780 - 0x17dc  0x17e0 - 0x17e9
+PUNCT     0x17d4 - 0x17d6  0x17d8 - 0x17db
+PRINT     0x1780 - 0x17dc  0x17e0 - 0x17e9
+SWIDTH1   0x1780 - 0x17dc  0x17e0 - 0x17e9
+
+
+/*
+ * U+1800 - U+18AF : Mongolian
+ */
+
+CONTROL   0x180e
+GRAPH     0x1800 - 0x180d  0x1810 - 0x1819  0x1820 - 0x1877  0x1880 - 0x18a9
+PUNCT     0x1800 - 0x180a
+PRINT     0x1800 - 0x180d  0x1810 - 0x1819  0x1820 - 0x1877  0x1880 - 0x18a9
+SWIDTH1   0x1800 - 0x180d  0x1810 - 0x1819  0x1820 - 0x1877  0x1880 - 0x18a9
+
+
+/*
+ * U+1DC0 - U+1DFF : Combining Diacritical Marks Supplement
+ */
+
+GRAPH     0x1DC0 - 0x1DC3
+PRINT     0x1DC0 - 0x1DC3
+SWIDTH0   0x1DC0 - 0x1DC3
+
+
+/*
+ * U+1E00 - U+1EFF : Latin Extended Additional
+ */
+
+ALPHA     0x1e00 - 0x1e9b  0x1ea0 - 0x1ef9
+GRAPH     0x1e00 - 0x1e9b  0x1ea0 - 0x1ef9
+LOWER     0x1e01  0x1e03  0x1e05  0x1e07  0x1e09  0x1e0b  0x1e0d
+LOWER     0x1e0f  0x1e11  0x1e13  0x1e15  0x1e17  0x1e19  0x1e1b
+LOWER     0x1e1d  0x1e1f  0x1e21  0x1e23  0x1e25  0x1e27  0x1e29
+LOWER     0x1e2b  0x1e2d  0x1e2f  0x1e31  0x1e33  0x1e35  0x1e37
+LOWER     0x1e39  0x1e3b  0x1e3d  0x1e3f  0x1e41  0x1e43  0x1e45
+LOWER     0x1e47  0x1e49  0x1e4b  0x1e4d  0x1e4f  0x1e51  0x1e53
+LOWER     0x1e55  0x1e57  0x1e59  0x1e5b  0x1e5d  0x1e5f  0x1e61
+LOWER     0x1e63  0x1e65  0x1e67  0x1e69  0x1e6b  0x1e6d  0x1e6f
+LOWER     0x1e71  0x1e73  0x1e75  0x1e77  0x1e79  0x1e7b  0x1e7d
+LOWER     0x1e7f  0x1e81  0x1e83  0x1e85  0x1e87  0x1e89  0x1e8b
+LOWER     0x1e8d  0x1e8f  0x1e91  0x1e93  0x1e95 - 0x1e9b  0x1ea1
+LOWER     0x1ea3  0x1ea5  0x1ea7  0x1ea9  0x1eab  0x1ead  0x1eaf
+LOWER     0x1eb1  0x1eb3  0x1eb5  0x1eb7  0x1eb9  0x1ebb  0x1ebd
+LOWER     0x1ebf  0x1ec1  0x1ec3  0x1ec5  0x1ec7  0x1ec9  0x1ecb
+LOWER     0x1ecd  0x1ecf  0x1ed1  0x1ed3  0x1ed5  0x1ed7  0x1ed9
+LOWER     0x1edb  0x1edd  0x1edf  0x1ee1  0x1ee3  0x1ee5  0x1ee7
+LOWER     0x1ee9  0x1eeb  0x1eed  0x1eef  0x1ef1  0x1ef3  0x1ef5
+LOWER     0x1ef7  0x1ef9
+UPPER     0x1e00  0x1e02  0x1e04  0x1e06  0x1e08  0x1e0a  0x1e0c
+UPPER     0x1e0e  0x1e10  0x1e12  0x1e14  0x1e16  0x1e18  0x1e1a
+UPPER     0x1e1c  0x1e1e  0x1e20  0x1e22  0x1e24  0x1e26  0x1e28
+UPPER     0x1e2a  0x1e2c  0x1e2e  0x1e30  0x1e32  0x1e34  0x1e36
+UPPER     0x1e38  0x1e3a  0x1e3c  0x1e3e  0x1e40  0x1e42  0x1e44
+UPPER     0x1e46  0x1e48  0x1e4a  0x1e4c  0x1e4e  0x1e50  0x1e52
+UPPER     0x1e54  0x1e56  0x1e58  0x1e5a  0x1e5c  0x1e5e  0x1e60
+UPPER     0x1e62  0x1e64  0x1e66  0x1e68  0x1e6a  0x1e6c  0x1e6e
+UPPER     0x1e70  0x1e72  0x1e74  0x1e76  0x1e78  0x1e7a  0x1e7c
+UPPER     0x1e7e  0x1e80  0x1e82  0x1e84  0x1e86  0x1e88  0x1e8a
+UPPER     0x1e8c  0x1e8e  0x1e90  0x1e92  0x1e94  0x1ea0  0x1ea2
+UPPER     0x1ea4  0x1ea6  0x1ea8  0x1eaa  0x1eac  0x1eae  0x1eb0
+UPPER     0x1eb2  0x1eb4  0x1eb6  0x1eb8  0x1eba  0x1ebc  0x1ebe
+UPPER     0x1ec0  0x1ec2  0x1ec4  0x1ec6  0x1ec8  0x1eca  0x1ecc
+UPPER     0x1ece  0x1ed0  0x1ed2  0x1ed4  0x1ed6  0x1ed8  0x1eda
+UPPER     0x1edc  0x1ede  0x1ee0  0x1ee2  0x1ee4  0x1ee6  0x1ee8
+UPPER     0x1eea  0x1eec  0x1eee  0x1ef0  0x1ef2  0x1ef4  0x1ef6
+UPPER     0x1ef8
+PRINT     0x1e00 - 0x1e9b  0x1ea0 - 0x1ef9
+SWIDTH1   0x1e00 - 0x1e9b  0x1ea0 - 0x1ef9
+
+MAPUPPER  < 0x1e01 0x1e00 >
+MAPUPPER  < 0x1e03 0x1e02 >
+MAPUPPER  < 0x1e05 0x1e04 >
+MAPUPPER  < 0x1e07 0x1e06 >
+MAPUPPER  < 0x1e09 0x1e08 >
+MAPUPPER  < 0x1e0b 0x1e0a >
+MAPUPPER  < 0x1e0d 0x1e0c >
+MAPUPPER  < 0x1e0f 0x1e0e >
+MAPUPPER  < 0x1e11 0x1e10 >
+MAPUPPER  < 0x1e13 0x1e12 >
+MAPUPPER  < 0x1e15 0x1e14 >
+MAPUPPER  < 0x1e17 0x1e16 >
+MAPUPPER  < 0x1e19 0x1e18 >
+MAPUPPER  < 0x1e1b 0x1e1a >
+MAPUPPER  < 0x1e1d 0x1e1c >
+MAPUPPER  < 0x1e1f 0x1e1e >
+MAPUPPER  < 0x1e21 0x1e20 >
+MAPUPPER  < 0x1e23 0x1e22 >
+MAPUPPER  < 0x1e25 0x1e24 >
+MAPUPPER  < 0x1e27 0x1e26 >
+MAPUPPER  < 0x1e29 0x1e28 >
+MAPUPPER  < 0x1e2b 0x1e2a >
+MAPUPPER  < 0x1e2d 0x1e2c >
+MAPUPPER  < 0x1e2f 0x1e2e >
+MAPUPPER  < 0x1e31 0x1e30 >
+MAPUPPER  < 0x1e33 0x1e32 >
+MAPUPPER  < 0x1e35 0x1e34 >
+MAPUPPER  < 0x1e37 0x1e36 >
+MAPUPPER  < 0x1e39 0x1e38 >
+MAPUPPER  < 0x1e3b 0x1e3a >
+MAPUPPER  < 0x1e3d 0x1e3c >
+MAPUPPER  < 0x1e3f 0x1e3e >
+MAPUPPER  < 0x1e41 0x1e40 >
+MAPUPPER  < 0x1e43 0x1e42 >
+MAPUPPER  < 0x1e45 0x1e44 >
+MAPUPPER  < 0x1e47 0x1e46 >
+MAPUPPER  < 0x1e49 0x1e48 >
+MAPUPPER  < 0x1e4b 0x1e4a >
+MAPUPPER  < 0x1e4d 0x1e4c >
+MAPUPPER  < 0x1e4f 0x1e4e >
+MAPUPPER  < 0x1e51 0x1e50 >
+MAPUPPER  < 0x1e53 0x1e52 >
+MAPUPPER  < 0x1e55 0x1e54 >
+MAPUPPER  < 0x1e57 0x1e56 >
+MAPUPPER  < 0x1e59 0x1e58 >
+MAPUPPER  < 0x1e5b 0x1e5a >
+MAPUPPER  < 0x1e5d 0x1e5c >
+MAPUPPER  < 0x1e5f 0x1e5e >
+MAPUPPER  < 0x1e61 0x1e60 >
+MAPUPPER  < 0x1e63 0x1e62 >
+MAPUPPER  < 0x1e65 0x1e64 >
+MAPUPPER  < 0x1e67 0x1e66 >
+MAPUPPER  < 0x1e69 0x1e68 >
+MAPUPPER  < 0x1e6b 0x1e6a >
+MAPUPPER  < 0x1e6d 0x1e6c >
+MAPUPPER  < 0x1e6f 0x1e6e >
+MAPUPPER  < 0x1e71 0x1e70 >
+MAPUPPER  < 0x1e73 0x1e72 >
+MAPUPPER  < 0x1e75 0x1e74 >
+MAPUPPER  < 0x1e77 0x1e76 >
+MAPUPPER  < 0x1e79 0x1e78 >
+MAPUPPER  < 0x1e7b 0x1e7a >
+MAPUPPER  < 0x1e7d 0x1e7c >
+MAPUPPER  < 0x1e7f 0x1e7e >
+MAPUPPER  < 0x1e81 0x1e80 >
+MAPUPPER  < 0x1e83 0x1e82 >
+MAPUPPER  < 0x1e85 0x1e84 >
+MAPUPPER  < 0x1e87 0x1e86 >
+MAPUPPER  < 0x1e89 0x1e88 >
+MAPUPPER  < 0x1e8b 0x1e8a >
+MAPUPPER  < 0x1e8d 0x1e8c >
+MAPUPPER  < 0x1e8f 0x1e8e >
+MAPUPPER  < 0x1e91 0x1e90 >
+MAPUPPER  < 0x1e93 0x1e92 >
+MAPUPPER  < 0x1e95 0x1e94 >
+MAPUPPER  < 0x1e9b 0x1e60 >
+MAPUPPER  < 0x1ea1 0x1ea0 >
+MAPUPPER  < 0x1ea3 0x1ea2 >
+MAPUPPER  < 0x1ea5 0x1ea4 >
+MAPUPPER  < 0x1ea7 0x1ea6 >
+MAPUPPER  < 0x1ea9 0x1ea8 >
+MAPUPPER  < 0x1eab 0x1eaa >
+MAPUPPER  < 0x1ead 0x1eac >
+MAPUPPER  < 0x1eaf 0x1eae >
+MAPUPPER  < 0x1eb1 0x1eb0 >
+MAPUPPER  < 0x1eb3 0x1eb2 >
+MAPUPPER  < 0x1eb5 0x1eb4 >
+MAPUPPER  < 0x1eb7 0x1eb6 >
+MAPUPPER  < 0x1eb9 0x1eb8 >
+MAPUPPER  < 0x1ebb 0x1eba >
+MAPUPPER  < 0x1ebd 0x1ebc >
+MAPUPPER  < 0x1ebf 0x1ebe >
+MAPUPPER  < 0x1ec1 0x1ec0 >
+MAPUPPER  < 0x1ec3 0x1ec2 >
+MAPUPPER  < 0x1ec5 0x1ec4 >
+MAPUPPER  < 0x1ec7 0x1ec6 >
+MAPUPPER  < 0x1ec9 0x1ec8 >
+MAPUPPER  < 0x1ecb 0x1eca >
+MAPUPPER  < 0x1ecd 0x1ecc >
+MAPUPPER  < 0x1ecf 0x1ece >
+MAPUPPER  < 0x1ed1 0x1ed0 >
+MAPUPPER  < 0x1ed3 0x1ed2 >
+MAPUPPER  < 0x1ed5 0x1ed4 >
+MAPUPPER  < 0x1ed7 0x1ed6 >
+MAPUPPER  < 0x1ed9 0x1ed8 >
+MAPUPPER  < 0x1edb 0x1eda >
+MAPUPPER  < 0x1edd 0x1edc >
+MAPUPPER  < 0x1edf 0x1ede >
+MAPUPPER  < 0x1ee1 0x1ee0 >
+MAPUPPER  < 0x1ee3 0x1ee2 >
+MAPUPPER  < 0x1ee5 0x1ee4 >
+MAPUPPER  < 0x1ee7 0x1ee6 >
+MAPUPPER  < 0x1ee9 0x1ee8 >
+MAPUPPER  < 0x1eeb 0x1eea >
+MAPUPPER  < 0x1eed 0x1eec >
+MAPUPPER  < 0x1eef 0x1eee >
+MAPUPPER  < 0x1ef1 0x1ef0 >
+MAPUPPER  < 0x1ef3 0x1ef2 >
+MAPUPPER  < 0x1ef5 0x1ef4 >
+MAPUPPER  < 0x1ef7 0x1ef6 >
+MAPUPPER  < 0x1ef9 0x1ef8 >
+MAPLOWER  < 0x1e00 0x1e01 >
+MAPLOWER  < 0x1e02 0x1e03 >
+MAPLOWER  < 0x1e04 0x1e05 >
+MAPLOWER  < 0x1e06 0x1e07 >
+MAPLOWER  < 0x1e08 0x1e09 >
+MAPLOWER  < 0x1e0a 0x1e0b >
+MAPLOWER  < 0x1e0c 0x1e0d >
+MAPLOWER  < 0x1e0e 0x1e0f >
+MAPLOWER  < 0x1e10 0x1e11 >
+MAPLOWER  < 0x1e12 0x1e13 >
+MAPLOWER  < 0x1e14 0x1e15 >
+MAPLOWER  < 0x1e16 0x1e17 >
+MAPLOWER  < 0x1e18 0x1e19 >
+MAPLOWER  < 0x1e1a 0x1e1b >
+MAPLOWER  < 0x1e1c 0x1e1d >
+MAPLOWER  < 0x1e1e 0x1e1f >
+MAPLOWER  < 0x1e20 0x1e21 >
+MAPLOWER  < 0x1e22 0x1e23 >
+MAPLOWER  < 0x1e24 0x1e25 >
+MAPLOWER  < 0x1e26 0x1e27 >
+MAPLOWER  < 0x1e28 0x1e29 >
+MAPLOWER  < 0x1e2a 0x1e2b >
+MAPLOWER  < 0x1e2c 0x1e2d >
+MAPLOWER  < 0x1e2e 0x1e2f >
+MAPLOWER  < 0x1e30 0x1e31 >
+MAPLOWER  < 0x1e32 0x1e33 >
+MAPLOWER  < 0x1e34 0x1e35 >
+MAPLOWER  < 0x1e36 0x1e37 >
+MAPLOWER  < 0x1e38 0x1e39 >
+MAPLOWER  < 0x1e3a 0x1e3b >
+MAPLOWER  < 0x1e3c 0x1e3d >
+MAPLOWER  < 0x1e3e 0x1e3f >
+MAPLOWER  < 0x1e40 0x1e41 >
+MAPLOWER  < 0x1e42 0x1e43 >
+MAPLOWER  < 0x1e44 0x1e45 >
+MAPLOWER  < 0x1e46 0x1e47 >
+MAPLOWER  < 0x1e48 0x1e49 >
+MAPLOWER  < 0x1e4a 0x1e4b >
+MAPLOWER  < 0x1e4c 0x1e4d >
+MAPLOWER  < 0x1e4e 0x1e4f >
+MAPLOWER  < 0x1e50 0x1e51 >
+MAPLOWER  < 0x1e52 0x1e53 >
+MAPLOWER  < 0x1e54 0x1e55 >
+MAPLOWER  < 0x1e56 0x1e57 >
+MAPLOWER  < 0x1e58 0x1e59 >
+MAPLOWER  < 0x1e5a 0x1e5b >
+MAPLOWER  < 0x1e5c 0x1e5d >
+MAPLOWER  < 0x1e5e 0x1e5f >
+MAPLOWER  < 0x1e60 0x1e61 >
+MAPLOWER  < 0x1e62 0x1e63 >
+MAPLOWER  < 0x1e64 0x1e65 >
+MAPLOWER  < 0x1e66 0x1e67 >
+MAPLOWER  < 0x1e68 0x1e69 >
+MAPLOWER  < 0x1e6a 0x1e6b >
+MAPLOWER  < 0x1e6c 0x1e6d >
+MAPLOWER  < 0x1e6e 0x1e6f >
+MAPLOWER  < 0x1e70 0x1e71 >
+MAPLOWER  < 0x1e72 0x1e73 >
+MAPLOWER  < 0x1e74 0x1e75 >
+MAPLOWER  < 0x1e76 0x1e77 >
+MAPLOWER  < 0x1e78 0x1e79 >
+MAPLOWER  < 0x1e7a 0x1e7b >
+MAPLOWER  < 0x1e7c 0x1e7d >
+MAPLOWER  < 0x1e7e 0x1e7f >
+MAPLOWER  < 0x1e80 0x1e81 >
+MAPLOWER  < 0x1e82 0x1e83 >
+MAPLOWER  < 0x1e84 0x1e85 >
+MAPLOWER  < 0x1e86 0x1e87 >
+MAPLOWER  < 0x1e88 0x1e89 >
+MAPLOWER  < 0x1e8a 0x1e8b >
+MAPLOWER  < 0x1e8c 0x1e8d >
+MAPLOWER  < 0x1e8e 0x1e8f >
+MAPLOWER  < 0x1e90 0x1e91 >
+MAPLOWER  < 0x1e92 0x1e93 >
+MAPLOWER  < 0x1e94 0x1e95 >
+MAPLOWER  < 0x1ea0 0x1ea1 >
+MAPLOWER  < 0x1ea2 0x1ea3 >
+MAPLOWER  < 0x1ea4 0x1ea5 >
+MAPLOWER  < 0x1ea6 0x1ea7 >
+MAPLOWER  < 0x1ea8 0x1ea9 >
+MAPLOWER  < 0x1eaa 0x1eab >
+MAPLOWER  < 0x1eac 0x1ead >
+MAPLOWER  < 0x1eae 0x1eaf >
+MAPLOWER  < 0x1eb0 0x1eb1 >
+MAPLOWER  < 0x1eb2 0x1eb3 >
+MAPLOWER  < 0x1eb4 0x1eb5 >
+MAPLOWER  < 0x1eb6 0x1eb7 >
+MAPLOWER  < 0x1eb8 0x1eb9 >
+MAPLOWER  < 0x1eba 0x1ebb >
+MAPLOWER  < 0x1ebc 0x1ebd >
+MAPLOWER  < 0x1ebe 0x1ebf >
+MAPLOWER  < 0x1ec0 0x1ec1 >
+MAPLOWER  < 0x1ec2 0x1ec3 >
+MAPLOWER  < 0x1ec4 0x1ec5 >
+MAPLOWER  < 0x1ec6 0x1ec7 >
+MAPLOWER  < 0x1ec8 0x1ec9 >
+MAPLOWER  < 0x1eca 0x1ecb >
+MAPLOWER  < 0x1ecc 0x1ecd >
+MAPLOWER  < 0x1ece 0x1ecf >
+MAPLOWER  < 0x1ed0 0x1ed1 >
+MAPLOWER  < 0x1ed2 0x1ed3 >
+MAPLOWER  < 0x1ed4 0x1ed5 >
+MAPLOWER  < 0x1ed6 0x1ed7 >
+MAPLOWER  < 0x1ed8 0x1ed9 >
+MAPLOWER  < 0x1eda 0x1edb >
+MAPLOWER  < 0x1edc 0x1edd >
+MAPLOWER  < 0x1ede 0x1edf >
+MAPLOWER  < 0x1ee0 0x1ee1 >
+MAPLOWER  < 0x1ee2 0x1ee3 >
+MAPLOWER  < 0x1ee4 0x1ee5 >
+MAPLOWER  < 0x1ee6 0x1ee7 >
+MAPLOWER  < 0x1ee8 0x1ee9 >
+MAPLOWER  < 0x1eea 0x1eeb >
+MAPLOWER  < 0x1eec 0x1eed >
+MAPLOWER  < 0x1eee 0x1eef >
+MAPLOWER  < 0x1ef0 0x1ef1 >
+MAPLOWER  < 0x1ef2 0x1ef3 >
+MAPLOWER  < 0x1ef4 0x1ef5 >
+MAPLOWER  < 0x1ef6 0x1ef7 >
+MAPLOWER  < 0x1ef8 0x1ef9 >
+
+
+/*
+ * U+1F00 - U+1FFF : Greek Extended
+ */
+
+ALPHA     0x1f00 - 0x1f15  0x1f18 - 0x1f1d  0x1f20 - 0x1f45  0x1f48 - 0x1f4d
+ALPHA     0x1f50 - 0x1f57  0x1f59  0x1f5b  0x1f5d  0x1f5f - 0x1f7d
+ALPHA     0x1f80 - 0x1fb4  0x1fb6 - 0x1fbc  0x1fbe  0x1fc2 - 0x1fc4
+ALPHA     0x1fc6 - 0x1fcc  0x1fd0 - 0x1fd3  0x1fd6 - 0x1fdb  0x1fe0 - 0x1fec
+ALPHA     0x1ff2 - 0x1ff4  0x1ff6 - 0x1ffc
+GRAPH     0x1f00 - 0x1f15  0x1f18 - 0x1f1d  0x1f20 - 0x1f45  0x1f48 - 0x1f4d
+GRAPH     0x1f50 - 0x1f57  0x1f59  0x1f5b  0x1f5d  0x1f5f - 0x1f7d
+GRAPH     0x1f80 - 0x1fb4  0x1fb6 - 0x1fc4  0x1fc6 - 0x1fd3  0x1fd6 - 0x1fdb
+GRAPH     0x1fdd - 0x1fef  0x1ff2 - 0x1ff4  0x1ff6 - 0x1ffe
+LOWER     0x1f00 - 0x1f07  0x1f10 - 0x1f15  0x1f20 - 0x1f27  0x1f30 - 0x1f37
+LOWER     0x1f40 - 0x1f45  0x1f50 - 0x1f57  0x1f60 - 0x1f67  0x1f70 - 0x1f7d
+LOWER     0x1f80 - 0x1f87  0x1f90 - 0x1f97  0x1fa0 - 0x1fa7  0x1fb0 - 0x1fb4
+LOWER     0x1fb6  0x1fb7  0x1fbe  0x1fc2 - 0x1fc4  0x1fc6  0x1fc7
+LOWER     0x1fd0 - 0x1fd3  0x1fd6  0x1fd7  0x1fe0 - 0x1fe7  0x1ff2 - 0x1ff4
+LOWER     0x1ff6  0x1ff7
+PUNCT     0x1fbd  0x1fbf - 0x1fc1  0x1fcd - 0x1fcf  0x1fdd - 0x1fdf
+PUNCT     0x1fed - 0x1fef  0x1ffd  0x1ffe
+UPPER     0x1f08 - 0x1f0f  0x1f18 - 0x1f1d  0x1f28 - 0x1f2f  0x1f38 - 0x1f3f
+UPPER     0x1f48 - 0x1f4d  0x1f59  0x1f5b  0x1f5d  0x1f5f  0x1f68 - 0x1f6f
+UPPER     0x1fb8 - 0x1fbb  0x1fc8 - 0x1fcb  0x1fd8 - 0x1fdb  0x1fe8 - 0x1fec
+UPPER     0x1ff8 - 0x1ffb
+PRINT     0x1f00 - 0x1f15  0x1f18 - 0x1f1d  0x1f20 - 0x1f45  0x1f48 - 0x1f4d
+PRINT     0x1f50 - 0x1f57  0x1f59  0x1f5b  0x1f5d  0x1f5f - 0x1f7d
+PRINT     0x1f80 - 0x1fb4  0x1fb6 - 0x1fc4  0x1fc6 - 0x1fd3  0x1fd6 - 0x1fdb
+PRINT     0x1fdd - 0x1fef  0x1ff2 - 0x1ff4  0x1ff6 - 0x1ffe
+SWIDTH1   0x1f00 - 0x1f15  0x1f18 - 0x1f1d  0x1f20 - 0x1f45  0x1f48 - 0x1f4d
+SWIDTH1   0x1f50 - 0x1f57  0x1f59  0x1f5b  0x1f5d  0x1f5f - 0x1f7d
+SWIDTH1   0x1f80 - 0x1fb4  0x1fb6 - 0x1fc4  0x1fc6 - 0x1fd3  0x1fd6 - 0x1fdb
+SWIDTH1   0x1fdd - 0x1fef  0x1ff2 - 0x1ff4  0x1ff6 - 0x1ffe
+
+MAPUPPER  < 0x1f00 - 0x1f07 : 0x1f08 >
+MAPUPPER  < 0x1f10 - 0x1f15 : 0x1f18 >
+MAPUPPER  < 0x1f20 - 0x1f27 : 0x1f28 >
+MAPUPPER  < 0x1f30 - 0x1f37 : 0x1f38 >
+MAPUPPER  < 0x1f40 - 0x1f45 : 0x1f48 >
+MAPUPPER  < 0x1f51 0x1f59 >
+MAPUPPER  < 0x1f53 0x1f5b >
+MAPUPPER  < 0x1f55 0x1f5d >
+MAPUPPER  < 0x1f57 0x1f5f >
+MAPUPPER  < 0x1f60 - 0x1f67 : 0x1f68 >
+MAPUPPER  < 0x1f70 - 0x1f71 : 0x1fba >
+MAPUPPER  < 0x1f72 - 0x1f75 : 0x1fc8 >
+MAPUPPER  < 0x1f76 - 0x1f77 : 0x1fda >
+MAPUPPER  < 0x1f78 - 0x1f79 : 0x1ff8 >
+MAPUPPER  < 0x1f7a - 0x1f7b : 0x1fea >
+MAPUPPER  < 0x1f7c - 0x1f7d : 0x1ffa >
+MAPUPPER  < 0x1f80 - 0x1f87 : 0x1f88 >
+MAPUPPER  < 0x1f90 - 0x1f97 : 0x1f98 >
+MAPUPPER  < 0x1fa0 - 0x1fa7 : 0x1fa8 >
+MAPUPPER  < 0x1fb0 - 0x1fb1 : 0x1fb8 >
+MAPUPPER  < 0x1fb3 0x1fbc >
+MAPUPPER  < 0x1fbe 0x0399 >
+MAPUPPER  < 0x1fc3 0x1fcc >
+MAPUPPER  < 0x1fd0 - 0x1fd1 : 0x1fd8 >
+MAPUPPER  < 0x1fe0 - 0x1fe1 : 0x1fe8 >
+MAPUPPER  < 0x1fe5 0x1fec >
+MAPUPPER  < 0x1ff3 0x1ffc >
+MAPLOWER  < 0x1f08 - 0x1f0f : 0x1f00 >
+MAPLOWER  < 0x1f18 - 0x1f1d : 0x1f10 >
+MAPLOWER  < 0x1f28 - 0x1f2f : 0x1f20 >
+MAPLOWER  < 0x1f38 - 0x1f3f : 0x1f30 >
+MAPLOWER  < 0x1f48 - 0x1f4d : 0x1f40 >
+MAPLOWER  < 0x1f59 0x1f51 >
+MAPLOWER  < 0x1f5b 0x1f53 >
+MAPLOWER  < 0x1f5d 0x1f55 >
+MAPLOWER  < 0x1f5f 0x1f57 >
+MAPLOWER  < 0x1f68 - 0x1f6f : 0x1f60 >
+MAPLOWER  < 0x1f88 - 0x1f8f : 0x1f80 >
+MAPLOWER  < 0x1f98 - 0x1f9f : 0x1f90 >
+MAPLOWER  < 0x1fa8 - 0x1faf : 0x1fa0 >
+MAPLOWER  < 0x1fb8 - 0x1fb9 : 0x1fb0 >
+MAPLOWER  < 0x1fba - 0x1fbb : 0x1f70 >
+MAPLOWER  < 0x1fbc 0x1fb3 >
+MAPLOWER  < 0x1fc8 - 0x1fcb : 0x1f72 >
+MAPLOWER  < 0x1fcc 0x1fc3 >
+MAPLOWER  < 0x1fd8 - 0x1fd9 : 0x1fd0 >
+MAPLOWER  < 0x1fda - 0x1fdb : 0x1f76 >
+MAPLOWER  < 0x1fe8 - 0x1fe9 : 0x1fe0 >
+MAPLOWER  < 0x1fea - 0x1feb : 0x1f7a >
+MAPLOWER  < 0x1fec 0x1fe5 >
+MAPLOWER  < 0x1ff8 - 0x1ff9 : 0x1f78 >
+MAPLOWER  < 0x1ffa - 0x1ffb : 0x1f7c >
+MAPLOWER  < 0x1ffc 0x1ff3 >
+
+
+/*
+ * U+2000 - U+206F : General Punctuation
+ */
+
+CONTROL   0x200c - 0x200f  0x202a - 0x202e  0x2060 - 0x2063  0x206a - 0x206f
+GRAPH     0x2010 - 0x2027  0x2030 - 0x2052  0x2057
+PUNCT     0x2010 - 0x2027  0x2030 - 0x2052  0x2057
+SPACE     0x2000 - 0x200b  0x2028  0x2029  0x202f  0x205f
+BLANK     0x2000 - 0x200b  0x202f  0x205f
+PRINT     0x2000 - 0x200b  0x2010 - 0x2029  0x202f - 0x2052  0x2057
+PRINT     0x205f
+SWIDTH1   0x2000 - 0x200b  0x2010 - 0x2029  0x202f - 0x2052  0x2057
+SWIDTH1   0x205f
+
+
+/*
+ * U+2070 - U+209F : Superscripts and Subscripts
+ */
+
+ALPHA     0x2071  0x207f
+GRAPH     0x2070  0x2071  0x2074 - 0x208e
+LOWER     0x2071  0x207f
+PUNCT     0x207a - 0x207e  0x208a - 0x208e
+PRINT     0x2070  0x2071  0x2074 - 0x208e
+SPECIAL   0x2070  0x2074 - 0x2079  0x2080 - 0x2089
+SWIDTH1   0x2070  0x2071  0x2074 - 0x208e
+
+
+/*
+ * U+20A0 - U+20CF : Currency Symbols
+ */
+
+GRAPH     0x20a0 - 0x20b1
+PUNCT     0x20a0 - 0x20b1
+PRINT     0x20a0 - 0x20b1
+SWIDTH1   0x20a0 - 0x20b1
+
+
+/*
+ * U+20D0 - U+20FF : Combining Diacritical Marks for Symbols
+ */
+
+GRAPH     0x20d0 - 0x20eb
+PRINT     0x20d0 - 0x20eb
+SWIDTH0   0x20d0 - 0x20eb
+
+
+/*
+ * U+2100 - U+214F : Letterlike Symbols
+ */
+
+ALPHA     0x2102  0x2107  0x210a - 0x2113  0x2115  0x2119 - 0x211d
+ALPHA     0x2124  0x2126  0x2128  0x212a - 0x212d  0x212f - 0x2131
+ALPHA     0x2133  0x2134  0x2139  0x213d - 0x213f  0x2145 - 0x2149
+GRAPH     0x2100 - 0x213a  0x213d - 0x214b
+LOWER     0x210a  0x210e  0x210f  0x2113  0x212f  0x2134  0x2139
+LOWER     0x213d  0x2146 - 0x2149
+PUNCT     0x2100  0x2101  0x2103 - 0x2106  0x2108  0x2109  0x2114
+PUNCT     0x2116 - 0x2118  0x211e - 0x2123  0x2125  0x2127  0x2129
+PUNCT     0x212e  0x2132  0x213a  0x2140 - 0x2144  0x214a  0x214b
+UPPER     0x2102  0x2107  0x210b - 0x210d  0x2110 - 0x2112  0x2115
+UPPER     0x2119 - 0x211d  0x2124  0x2126  0x2128  0x212a - 0x212d
+UPPER     0x2130  0x2131  0x2133  0x213e  0x213f  0x2145
+PRINT     0x2100 - 0x213a  0x213d - 0x214b
+SWIDTH1   0x2100 - 0x213a  0x213d - 0x214b
+
+MAPLOWER  < 0x2126 0x03c9 >
+MAPLOWER  < 0x212a 'k' >
+MAPLOWER  < 0x212b 0x00e5 >
+
+
+/*
+ * U+2150 - U+218F : Number Forms
+ */
+
+GRAPH     0x2153 - 0x2183
+PRINT     0x2153 - 0x2183
+SPECIAL   0x2153 - 0x2183
+SWIDTH1   0x2153 - 0x2183
+
+MAPUPPER  < 0x2170 - 0x217f : 0x2160 >
+MAPLOWER  < 0x2160 - 0x216f : 0x2170 >
+
+
+/*
+ * U+2190 - U+21FF : Arrows
+ */
+
+GRAPH     0x2190 - 0x21ff
+PUNCT     0x2190 - 0x21ff
+PRINT     0x2190 - 0x21ff
+SWIDTH1   0x2190 - 0x21ff
+
+
+/*
+ * U+2200 - U+22FF : Mathematical Operators
+ */
+
+GRAPH     0x2200 - 0x22ff
+PUNCT     0x2200 - 0x22ff
+PRINT     0x2200 - 0x22ff
+SWIDTH1   0x2200 - 0x22ff
+
+
+/*
+ * U+2300 - U+23FF : Miscellaneous Technical
+ */
+
+GRAPH     0x2300 - 0x23ce
+PUNCT     0x2300 - 0x23ce
+PRINT     0x2300 - 0x23ce
+SWIDTH1   0x2300 - 0x2328  0x232b - 0x23ce
+SWIDTH2   0x2329  0x232a
+
+
+/*
+ * U+2400 - U+243F : Control Pictures
+ */
+
+GRAPH     0x2400 - 0x2426
+PUNCT     0x2400 - 0x2426
+PRINT     0x2400 - 0x2426
+SWIDTH1   0x2400 - 0x2426
+
+
+/*
+ * U+2440 - U+245F : Optical Character Recognition
+ */
+
+GRAPH     0x2440 - 0x244a
+PUNCT     0x2440 - 0x244a
+PRINT     0x2440 - 0x244a
+SWIDTH1   0x2440 - 0x244a
+
+
+/*
+ * U+2460 - U+24FF : Enclosed Alphanumerics
+ */
+
+GRAPH     0x2460 - 0x24fe
+PUNCT     0x249c - 0x24e9
+PRINT     0x2460 - 0x24fe
+SPECIAL   0x2460 - 0x249b  0x24ea - 0x24fe
+SWIDTH1   0x2460 - 0x24fe
+
+MAPUPPER  < 0x24d0 - 0x24e9 : 0x24b6 >
+MAPLOWER  < 0x24b6 - 0x24cf : 0x24d0 >
+
+
+/*
+ * U+2500 - U+257F : Box Drawing
+ */
+
+GRAPH     0x2500 - 0x257f
+PUNCT     0x2500 - 0x257f
+PRINT     0x2500 - 0x257f
+SWIDTH1   0x2500 - 0x257f
+
+
+/*
+ * U+2580 - U+259F : Block Elements
+ */
+
+GRAPH     0x2580 - 0x259f
+PUNCT     0x2580 - 0x259f
+PRINT     0x2580 - 0x259f
+SWIDTH1   0x2580 - 0x259f
+
+
+/*
+ * U+25A0 - U+25FF : Geometric Shapes
+ */
+
+GRAPH     0x25a0 - 0x25ff
+PUNCT     0x25a0 - 0x25ff
+PRINT     0x25a0 - 0x25ff
+SWIDTH1   0x25a0 - 0x25ff
+
+
+/*
+ * U+2600 - U+26FF : Miscellaneous Symbols
+ */
+
+GRAPH     0x2600 - 0x2613  0x2616  0x2617  0x2619 - 0x267d  0x2680 - 0x2689
+PUNCT     0x2600 - 0x2613  0x2616  0x2617  0x2619 - 0x267d  0x2680 - 0x2689
+PRINT     0x2600 - 0x2613  0x2616  0x2617  0x2619 - 0x267d  0x2680 - 0x2689
+SWIDTH1   0x2600 - 0x2613  0x2616  0x2617  0x2619 - 0x267d  0x2680 - 0x2689
+
+
+/*
+ * U+2700 - U+27BF : Dingbats
+ */
+
+GRAPH     0x2701 - 0x2704  0x2706 - 0x2709  0x270c - 0x2727  0x2729 - 0x274b
+GRAPH     0x274d  0x274f - 0x2752  0x2756  0x2758 - 0x275e  0x2761 - 0x2794
+GRAPH     0x2798 - 0x27af  0x27b1 - 0x27be
+PUNCT     0x2701 - 0x2704  0x2706 - 0x2709  0x270c - 0x2727  0x2729 - 0x274b
+PUNCT     0x274d  0x274f - 0x2752  0x2756  0x2758 - 0x275e  0x2761 - 0x2775
+PUNCT     0x2794  0x2798 - 0x27af  0x27b1 - 0x27be
+PRINT     0x2701 - 0x2704  0x2706 - 0x2709  0x270c - 0x2727  0x2729 - 0x274b
+PRINT     0x274d  0x274f - 0x2752  0x2756  0x2758 - 0x275e  0x2761 - 0x2794
+PRINT     0x2798 - 0x27af  0x27b1 - 0x27be
+SPECIAL   0x2776 - 0x2793
+SWIDTH1   0x2701 - 0x2704  0x2706 - 0x2709  0x270c - 0x2727  0x2729 - 0x274b
+SWIDTH1   0x274d  0x274f - 0x2752  0x2756  0x2758 - 0x275e  0x2761 - 0x2794
+SWIDTH1   0x2798 - 0x27af  0x27b1 - 0x27be
+
+
+/*
+ * U+27C0 - U+27EF : Miscellaneous Mathematical Symbols-A
+ */
+
+GRAPH     0x27d0 - 0x27eb
+PUNCT     0x27d0 - 0x27eb
+PRINT     0x27d0 - 0x27eb
+SWIDTH1   0x27d0 - 0x27eb
+
+
+/*
+ * U+27F0 - U+27FF : Supplemental Arrows-A
+ */
+
+GRAPH     0x27f0 - 0x27ff
+PUNCT     0x27f0 - 0x27ff
+PRINT     0x27f0 - 0x27ff
+SWIDTH1   0x27f0 - 0x27ff
+
+
+/*
+ * U+2800 - U+28FF : Braille Patterns
+ */
+
+GRAPH     0x2800 - 0x28ff
+PUNCT     0x2800 - 0x28ff
+PRINT     0x2800 - 0x28ff
+SWIDTH1   0x2800 - 0x28ff
+
+
+/*
+ * U+2900 - U+297F : Supplemental Arrows-B
+ */
+
+GRAPH     0x2900 - 0x297f
+PUNCT     0x2900 - 0x297f
+PRINT     0x2900 - 0x297f
+SWIDTH1   0x2900 - 0x297f
+
+
+/*
+ * U+2980 - U+29FF : Miscellaneous Mathematical Symbols-B
+ */
+
+GRAPH     0x2980 - 0x29ff
+PUNCT     0x2980 - 0x29ff
+PRINT     0x2980 - 0x29ff
+SWIDTH1   0x2980 - 0x29ff
+
+
+/*
+ * U+2A00 - U+2AFF : Supplemental Mathematical Operators
+ */
+
+GRAPH     0x2a00 - 0x2aff
+PUNCT     0x2a00 - 0x2aff
+PRINT     0x2a00 - 0x2aff
+SWIDTH1   0x2a00 - 0x2aff
+
+
+/*
+ * U+2E80 - U+2EFF : CJK Radicals Supplement
+ */
+
+GRAPH     0x2e80 - 0x2e99  0x2e9b - 0x2ef3
+PUNCT     0x2e80 - 0x2e99  0x2e9b - 0x2ef3
+PRINT     0x2e80 - 0x2e99  0x2e9b - 0x2ef3
+SWIDTH2   0x2e80 - 0x2e99  0x2e9b - 0x2ef3
+
+
+/*
+ * U+2F00 - U+2FDF : Kangxi Radicals
+ */
+
+GRAPH     0x2f00 - 0x2fd5
+PUNCT     0x2f00 - 0x2fd5
+PRINT     0x2f00 - 0x2fd5
+SWIDTH2   0x2f00 - 0x2fd5
+
+
+/*
+ * U+2FF0 - U+2FFF : Ideographic Description Characters
+ */
+
+GRAPH     0x2ff0 - 0x2ffb
+PUNCT     0x2ff0 - 0x2ffb
+PRINT     0x2ff0 - 0x2ffb
+SWIDTH2   0x2ff0 - 0x2ffb
+
+
+/*
+ * U+3000 - U+303F : CJK Symbols and Punctuation
+ */
+
+GRAPH     0x3001 - 0x303f
+PUNCT     0x3001 - 0x3004  0x3008 - 0x3020  0x3030  0x3036  0x3037
+PUNCT     0x303d - 0x303f
+SPACE     0x3000
+BLANK     0x3000
+PRINT     0x3000 - 0x303f
+IDEOGRAM  0x3006
+SPECIAL   0x3007  0x3021 - 0x3029  0x3038 - 0x303a
+SWIDTH1   0x303f
+SWIDTH2   0x3000 - 0x303e
+
+
+/*
+ * U+3040 - U+309F : Hiragana
+ */
+
+GRAPH     0x3041 - 0x3096  0x3099 - 0x309f
+PUNCT     0x309b  0x309c
+PRINT     0x3041 - 0x3096  0x3099 - 0x309f
+PHONOGRAM 0x3041 - 0x3096  0x309f
+SWIDTH0   0x3099 - 0x309a
+SWIDTH2   0x3041 - 0x3096  0x309b - 0x309f
+
+
+/*
+ * U+30A0 - U+30FF : Katakana
+ */
+
+GRAPH     0x30a0 - 0x30ff
+PUNCT     0x30a0  0x30fb
+PRINT     0x30a0 - 0x30ff
+PHONOGRAM 0x30a1 - 0x30fa  0x30ff
+SWIDTH2   0x30a0 - 0x30ff
+
+
+/*
+ * U+3100 - U+312F : Bopomofo
+ */
+
+GRAPH     0x3105 - 0x312c
+PRINT     0x3105 - 0x312c
+SWIDTH2   0x3105 - 0x312c
+
+
+/*
+ * U+3130 - U+318F : Hangul Compatibility Jamo
+ */
+
+GRAPH     0x3131 - 0x318e
+PRINT     0x3131 - 0x318e
+PHONOGRAM 0x3131 - 0x3163  0x3165 - 0x318e
+SWIDTH2   0x3131 - 0x318e
+
+
+/*
+ * U+3190 - U+319F : Kanbun
+ */
+
+GRAPH     0x3190 - 0x319f
+PUNCT     0x3190  0x3191  0x3196 - 0x319f
+PRINT     0x3190 - 0x319f
+SPECIAL   0x3192 - 0x3195
+SWIDTH2   0x3190 - 0x319f
+
+
+/*
+ * U+31A0 - U+31BF : Bopomofo Extended
+ */
+
+GRAPH     0x31a0 - 0x31b7
+PRINT     0x31a0 - 0x31b7
+SWIDTH2   0x31a0 - 0x31b7
+
+
+/*
+ * U+31F0 - U+31FF : Katakana Phonetic Extensions
+ */
+
+GRAPH     0x31f0 - 0x31ff
+PRINT     0x31f0 - 0x31ff
+PHONOGRAM 0x31f0 - 0x31ff
+SWIDTH2   0x31f0 - 0x31ff
+
+
+/*
+ * U+3200 - U+32FF : Enclosed CJK Letters and Months
+ */
+
+GRAPH     0x3200 - 0x321c  0x3220 - 0x3243  0x3251 - 0x327b  0x327f - 0x32cb
+GRAPH     0x32d0 - 0x32fe
+PUNCT     0x3200 - 0x321c  0x322a - 0x3243  0x3260 - 0x327b  0x327f
+PUNCT     0x328a - 0x32b0  0x32c0 - 0x32cb  0x32d0 - 0x32fe
+PRINT     0x3200 - 0x321c  0x3220 - 0x3243  0x3251 - 0x327b  0x327f - 0x32cb
+PRINT     0x32d0 - 0x32fe
+SPECIAL   0x3220 - 0x3229  0x3251 - 0x325f  0x3280 - 0x3289  0x32b1 - 0x32bf
+SWIDTH2   0x3200 - 0x321c  0x3220 - 0x3243  0x3251 - 0x327b  0x327f - 0x32cb
+SWIDTH2   0x32d0 - 0x32fe
+
+
+/*
+ * U+3300 - U+33FF : CJK Compatibility
+ */
+
+GRAPH     0x3300 - 0x3376  0x337b - 0x33dd  0x33e0 - 0x33fe
+PUNCT     0x3300 - 0x3376  0x337b - 0x33dd  0x33e0 - 0x33fe
+PRINT     0x3300 - 0x3376  0x337b - 0x33dd  0x33e0 - 0x33fe
+SWIDTH2   0x3300 - 0x3376  0x337b - 0x33dd  0x33e0 - 0x33fe
+
+
+/*
+ * U+3400 - U+4DBF : CJK Unified Ideographs Extension A
+ */
+
+GRAPH     0x3400 - 0x4db5
+PRINT     0x3400 - 0x4db5
+IDEOGRAM  0x3400 - 0x4db5
+SWIDTH2   0x3400 - 0x4db5
+
+
+/*
+ * U+4E00 - U+9FFF : CJK Unified Ideographs
+ */
+
+GRAPH     0x4e00 - 0x9fa5
+PRINT     0x4e00 - 0x9fa5
+IDEOGRAM  0x4e00 - 0x9fa5
+SWIDTH2   0x4e00 - 0x9fa5
+
+
+/*
+ * U+A000 - U+A48F : Yi Syllables
+ */
+
+GRAPH     0xa000 - 0xa48c
+PRINT     0xa000 - 0xa48c
+PHONOGRAM 0xa000 - 0xa48c
+SWIDTH2   0xa000 - 0xa48c
+
+
+/*
+ * U+A490 - U+A4CF : Yi Radicals
+ */
+
+GRAPH     0xa490 - 0xa4c6
+PUNCT     0xa490 - 0xa4c6
+PRINT     0xa490 - 0xa4c6
+SWIDTH2   0xa490 - 0xa4c6
+
+
+/*
+ * U+AC00 - U+D7AF : Hangul Syllables
+ */
+
+GRAPH     0xac00 - 0xd7a3
+PRINT     0xac00 - 0xd7a3
+PHONOGRAM 0xac00 - 0xd7a3
+SWIDTH2   0xac00 - 0xd7a3
+
+
+/*
+ * U+D800 - U+DB7F : High Surrogates
+ */
+
+PRINT     0xd800 - 0xdb7f
+SWIDTH1   0xd800 - 0xdb7f
+
+
+/*
+ * U+DB80 - U+DBFF : High Private Use Surrogates
+ */
+
+PRINT     0xdb80 - 0xdbff
+SWIDTH1   0xdb80 - 0xdbff
+
+
+/*
+ * U+DC00 - U+DFFF : Low Surrogates
+ */
+
+PRINT     0xdc00 - 0xdfff
+SWIDTH1   0xdc00 - 0xdfff
+
+
+/*
+ * U+E000 - U+F8FF : Private Use Area
+ */
+
+GRAPH     0xe000 - 0xf8ff
+PRINT     0xe000 - 0xf8ff
+SWIDTH1   0xe000 - 0xf8ff
+
+
+/*
+ * U+F900 - U+FAFF : CJK Compatibility Ideographs
+ */
+
+GRAPH     0xf900 - 0xfa2d  0xfa30 - 0xfa6a
+PRINT     0xf900 - 0xfa2d  0xfa30 - 0xfa6a
+IDEOGRAM  0xf900 - 0xfa2d  0xfa30 - 0xfa6a
+SWIDTH2   0xf900 - 0xfa2d  0xfa30 - 0xfa6a
+
+
+/*
+ * U+FB00 - U+FB4F : Alphabetic Presentation Forms
+ */
+
+ALPHA     0xfb00 - 0xfb06  0xfb13 - 0xfb17
+GRAPH     0xfb00 - 0xfb06  0xfb13 - 0xfb17  0xfb1d - 0xfb36  0xfb38 - 0xfb3c
+GRAPH     0xfb3e  0xfb40  0xfb41  0xfb43  0xfb44  0xfb46 - 0xfb4f
+LOWER     0xfb00 - 0xfb06  0xfb13 - 0xfb17
+PUNCT     0xfb29
+PRINT     0xfb00 - 0xfb06  0xfb13 - 0xfb17  0xfb1d - 0xfb36  0xfb38 - 0xfb3c
+PRINT     0xfb3e  0xfb40  0xfb41  0xfb43  0xfb44  0xfb46 - 0xfb4f
+SWIDTH1   0xfb00 - 0xfb06  0xfb13 - 0xfb17  0xfb1d - 0xfb36  0xfb38 - 0xfb3c
+SWIDTH1   0xfb3e  0xfb40  0xfb41  0xfb43  0xfb44  0xfb46 - 0xfb4f
+
+
+/*
+ * U+FB50 - U+FDFF : Arabic Presentation Forms-A
+ */
+
+GRAPH     0xfb50 - 0xfbb1  0xfbd3 - 0xfd3f  0xfd50 - 0xfd8f  0xfd92 - 0xfdc7
+GRAPH     0xfdf0 - 0xfdfc
+PUNCT     0xfd3e  0xfd3f  0xfdfc
+PRINT     0xfb50 - 0xfbb1  0xfbd3 - 0xfd3f  0xfd50 - 0xfd8f  0xfd92 - 0xfdc7
+PRINT     0xfdf0 - 0xfdfc
+SWIDTH1   0xfb50 - 0xfbb1  0xfbd3 - 0xfd3f  0xfd50 - 0xfd8f  0xfd92 - 0xfdc7
+SWIDTH1   0xfdf0 - 0xfdfc
+
+
+/*
+ * U+FE00 - U+FE0F : Variation Selectors
+ */
+
+GRAPH     0xfe00 - 0xfe0f
+PRINT     0xfe00 - 0xfe0f
+SWIDTH1   0xfe00 - 0xfe0f
+
+
+/*
+ * U+FE20 - U+FE2F : Combining Half Marks
+ */
+
+GRAPH     0xfe20 - 0xfe23
+PRINT     0xfe20 - 0xfe23
+SWIDTH0   0xfe20 - 0xfe23
+
+
+/*
+ * U+FE30 - U+FE4F : CJK Compatibility Forms
+ */
+
+GRAPH     0xfe30 - 0xfe46  0xfe49 - 0xfe4f
+PUNCT     0xfe30 - 0xfe46  0xfe49 - 0xfe4f
+PRINT     0xfe30 - 0xfe46  0xfe49 - 0xfe4f
+SWIDTH2   0xfe30 - 0xfe46  0xfe49 - 0xfe4f
+
+
+/*
+ * U+FE50 - U+FE6F : Small Form Variants
+ */
+
+GRAPH     0xfe50 - 0xfe52  0xfe54 - 0xfe66  0xfe68 - 0xfe6b
+PUNCT     0xfe50 - 0xfe52  0xfe54 - 0xfe66  0xfe68 - 0xfe6b
+PRINT     0xfe50 - 0xfe52  0xfe54 - 0xfe66  0xfe68 - 0xfe6b
+SWIDTH2   0xfe50 - 0xfe52  0xfe54 - 0xfe66  0xfe68 - 0xfe6b
+
+
+/*
+ * U+FE70 - U+FEFF : Arabic Presentation Forms-B
+ */
+
+CONTROL   0xfeff
+GRAPH     0xfe70 - 0xfe74  0xfe76 - 0xfefc
+PRINT     0xfe70 - 0xfe74  0xfe76 - 0xfefc
+SWIDTH1   0xfe70 - 0xfe74  0xfe76 - 0xfefc
+
+
+/*
+ * U+FF00 - U+FFEF : Halfwidth and Fullwidth Forms
+ */
+
+ALPHA     0xff21 - 0xff3a  0xff41 - 0xff5a
+GRAPH     0xff01 - 0xffbe  0xffc2 - 0xffc7  0xffca - 0xffcf  0xffd2 - 0xffd7
+GRAPH     0xffda - 0xffdc  0xffe0 - 0xffe6  0xffe8 - 0xffee
+LOWER     0xff41 - 0xff5a
+PUNCT     0xff01 - 0xff0f  0xff1a - 0xff20  0xff3b - 0xff40  0xff5b - 0xff65
+PUNCT     0xffe0 - 0xffe6  0xffe8 - 0xffee
+UPPER     0xff21 - 0xff3a
+PRINT     0xff01 - 0xffbe  0xffc2 - 0xffc7  0xffca - 0xffcf  0xffd2 - 0xffd7
+PRINT     0xffda - 0xffdc  0xffe0 - 0xffe6  0xffe8 - 0xffee
+PHONOGRAM 0xff66 - 0xff6f  0xff71 - 0xff9d  0xffa1 - 0xffbe  0xffc2 - 0xffc7
+PHONOGRAM 0xffca - 0xffcf  0xffd2 - 0xffd7  0xffda - 0xffdc
+SWIDTH1   0xff61 - 0xffbe  0xffc2 - 0xffc7  0xffca - 0xffcf  0xffd2 - 0xffd7
+SWIDTH1   0xffda - 0xffdc  0xffe8 - 0xffee
+SWIDTH2   0xff01 - 0xff60  0xffe0 - 0xffe6
+
+MAPUPPER  < 0xff41 - 0xff5a : 0xff21 >
+MAPLOWER  < 0xff21 - 0xff3a : 0xff41 >
+
+
+/*
+ * U+FFF0 - U+FFFF : Specials
+ */
+
+CONTROL   0xfff9 - 0xfffb
+GRAPH     0xfffc  0xfffd
+PUNCT     0xfffc  0xfffd
+PRINT     0xfffc  0xfffd
+SWIDTH1   0xfffc  0xfffd
+
+
+/*
+ * U+10300 - U+1032F : Old Italic
+ */
+
+GRAPH     0x10300 - 0x1031e  0x10320 - 0x10323
+PRINT     0x10300 - 0x1031e  0x10320 - 0x10323
+SPECIAL   0x10320 - 0x10323
+SWIDTH1   0x10300 - 0x1031e  0x10320 - 0x10323
+
+
+/*
+ * U+10330 - U+1034F : Gothic
+ */
+
+GRAPH     0x10330 - 0x1034a
+PRINT     0x10330 - 0x1034a
+SPECIAL   0x1034a
+SWIDTH1   0x10330 - 0x1034a
+
+
+/*
+ * U+10400 - U+1044F : Deseret
+ */
+
+ALPHA     0x10400 - 0x10425  0x10428 - 0x1044d
+GRAPH     0x10400 - 0x10425  0x10428 - 0x1044d
+LOWER     0x10428 - 0x1044d
+UPPER     0x10400 - 0x10425
+PRINT     0x10400 - 0x10425  0x10428 - 0x1044d
+SWIDTH1   0x10400 - 0x10425  0x10428 - 0x1044d
+
+MAPUPPER  < 0x10428 - 0x1044d : 0x10400 >
+MAPLOWER  < 0x10400 - 0x10425 : 0x10428 >
+
+
+/*
+ * U+1D000 - U+1D0FF : Byzantine Musical Symbols
+ */
+
+GRAPH     0x1d000 - 0x1d0f5
+PUNCT     0x1d000 - 0x1d0f5
+PRINT     0x1d000 - 0x1d0f5
+SWIDTH1   0x1d000 - 0x1d0f5
+
+
+/*
+ * U+1D100 - U+1D1FF : Musical Symbols
+ */
+
+CONTROL   0x1d173 - 0x1d17a
+GRAPH     0x1d100 - 0x1d126  0x1d12a - 0x1d172  0x1d17b - 0x1d1dd
+PUNCT     0x1d100 - 0x1d126  0x1d12a - 0x1d164  0x1d16a - 0x1d16c
+PUNCT     0x1d183  0x1d184  0x1d18c - 0x1d1a9  0x1d1ae - 0x1d1dd
+PRINT     0x1d100 - 0x1d126  0x1d12a - 0x1d158  0x1d15a - 0x1d172
+PRINT     0x1d17b - 0x1d1dd
+SWIDTH0   0x1d165 - 0x1d169  0x1d16d - 0x1d172  0x1d17b - 0x1d182
+SWIDTH0   0x1d185 - 0x1d18b  0x1d1aa - 0x1d1ad
+SWIDTH1   0x1d100 - 0x1d126  0x1d12a - 0x1d158  0x1d15a - 0x1d164
+SWIDTH1   0x1d16a - 0x1d16c  0x1d183   0x1d184  0x1d18c - 0x1d1a9
+SWIDTH1   0x1d1ae - 0x1d1dd
+
+
+/*
+ * U+1D400 - U+1D7FF : Mathematical Alphanumeric Symbols
+ */
+
+ALPHA     0x1d400 - 0x1d454  0x1d456 - 0x1d49c  0x1d49e  0x1d49f
+ALPHA     0x1d4a2  0x1d4a5  0x1d4a6  0x1d4a9 - 0x1d4ac  0x1d4ae - 0x1d4b9
+ALPHA     0x1d4bb  0x1d4bd - 0x1d4c0  0x1d4c2  0x1d4c3  0x1d4c5 - 0x1d505
+ALPHA     0x1d507 - 0x1d50a  0x1d50d - 0x1d514  0x1d516 - 0x1d51c
+ALPHA     0x1d51e - 0x1d539  0x1d53b - 0x1d53e  0x1d540 - 0x1d544
+ALPHA     0x1d546  0x1d54a - 0x1d550  0x1d552 - 0x1d6a3  0x1d6a8 - 0x1d6c0
+ALPHA     0x1d6c2 - 0x1d6da  0x1d6dc - 0x1d6fa  0x1d6fc - 0x1d714
+ALPHA     0x1d716 - 0x1d734  0x1d736 - 0x1d74e  0x1d750 - 0x1d76e
+ALPHA     0x1d770 - 0x1d788  0x1d78a - 0x1d7a8  0x1d7aa - 0x1d7c2
+ALPHA     0x1d7c4 - 0x1d7c9
+GRAPH     0x1d400 - 0x1d454  0x1d456 - 0x1d49c  0x1d49e  0x1d49f
+GRAPH     0x1d4a2  0x1d4a5  0x1d4a6  0x1d4a9 - 0x1d4ac  0x1d4ae - 0x1d4b9
+GRAPH     0x1d4bb  0x1d4bd - 0x1d4c0  0x1d4c2  0x1d4c3  0x1d4c5 - 0x1d505
+GRAPH     0x1d507 - 0x1d50a  0x1d50d - 0x1d514  0x1d516 - 0x1d51c
+GRAPH     0x1d51e - 0x1d539  0x1d53b - 0x1d53e  0x1d540 - 0x1d544
+GRAPH     0x1d546  0x1d54a - 0x1d550  0x1d552 - 0x1d6a3  0x1d6a8 - 0x1d7c9
+GRAPH     0x1d7ce - 0x1d7ff
+LOWER     0x1d41a - 0x1d433  0x1d44e - 0x1d454  0x1d456 - 0x1d467
+LOWER     0x1d482 - 0x1d49b  0x1d4b6 - 0x1d4b9  0x1d4bb  0x1d4bd - 0x1d4c0
+LOWER     0x1d4c2  0x1d4c3  0x1d4c5 - 0x1d4cf  0x1d4ea - 0x1d503
+LOWER     0x1d51e - 0x1d537  0x1d552 - 0x1d56b  0x1d586 - 0x1d59f
+LOWER     0x1d5ba - 0x1d5d3  0x1d5ee - 0x1d607  0x1d622 - 0x1d63b
+LOWER     0x1d656 - 0x1d66f  0x1d68a - 0x1d6a3  0x1d6c2 - 0x1d6da
+LOWER     0x1d6dc - 0x1d6e1  0x1d6fc - 0x1d714  0x1d716 - 0x1d71b
+LOWER     0x1d736 - 0x1d74e  0x1d750 - 0x1d755  0x1d770 - 0x1d788
+LOWER     0x1d78a - 0x1d78f  0x1d7aa - 0x1d7c2  0x1d7c4 - 0x1d7c9
+PUNCT     0x1d6c1  0x1d6db  0x1d6fb  0x1d715  0x1d735  0x1d74f
+PUNCT     0x1d76f  0x1d789  0x1d7a9  0x1d7c3
+UPPER     0x1d400 - 0x1d419  0x1d434 - 0x1d44d  0x1d468 - 0x1d481
+UPPER     0x1d49c  0x1d49e  0x1d49f  0x1d4a2  0x1d4a5  0x1d4a6
+UPPER     0x1d4a9 - 0x1d4ac  0x1d4ae - 0x1d4b5  0x1d4d0 - 0x1d4e9
+UPPER     0x1d504  0x1d505  0x1d507 - 0x1d50a  0x1d50d - 0x1d514
+UPPER     0x1d516 - 0x1d51c  0x1d538  0x1d539  0x1d53b - 0x1d53e
+UPPER     0x1d540 - 0x1d544  0x1d546  0x1d54a - 0x1d550  0x1d56c - 0x1d585
+UPPER     0x1d5a0 - 0x1d5b9  0x1d5d4 - 0x1d5ed  0x1d608 - 0x1d621
+UPPER     0x1d63c - 0x1d655  0x1d670 - 0x1d689  0x1d6a8 - 0x1d6c0
+UPPER     0x1d6e2 - 0x1d6fa  0x1d71c - 0x1d734  0x1d756 - 0x1d76e
+UPPER     0x1d790 - 0x1d7a8
+PRINT     0x1d400 - 0x1d454  0x1d456 - 0x1d49c  0x1d49e  0x1d49f
+PRINT     0x1d4a2  0x1d4a5  0x1d4a6  0x1d4a9 - 0x1d4ac  0x1d4ae - 0x1d4b9
+PRINT     0x1d4bb  0x1d4bd - 0x1d4c0  0x1d4c2  0x1d4c3  0x1d4c5 - 0x1d505
+PRINT     0x1d507 - 0x1d50a  0x1d50d - 0x1d514  0x1d516 - 0x1d51c
+PRINT     0x1d51e - 0x1d539  0x1d53b - 0x1d53e  0x1d540 - 0x1d544
+PRINT     0x1d546  0x1d54a - 0x1d550  0x1d552 - 0x1d6a3  0x1d6a8 - 0x1d7c9
+PRINT     0x1d7ce - 0x1d7ff
+SWIDTH1   0x1d400 - 0x1d454  0x1d456 - 0x1d49c  0x1d49e  0x1d49f
+SWIDTH1   0x1d4a2  0x1d4a5  0x1d4a6  0x1d4a9 - 0x1d4ac  0x1d4ae - 0x1d4b9
+SWIDTH1   0x1d4bb  0x1d4bd - 0x1d4c0  0x1d4c2  0x1d4c3  0x1d4c5 - 0x1d505
+SWIDTH1   0x1d507 - 0x1d50a  0x1d50d - 0x1d514  0x1d516 - 0x1d51c
+SWIDTH1   0x1d51e - 0x1d539  0x1d53b - 0x1d53e  0x1d540 - 0x1d544
+SWIDTH1   0x1d546  0x1d54a - 0x1d550  0x1d552 - 0x1d6a3  0x1d6a8 - 0x1d7c9
+SWIDTH1   0x1d7ce - 0x1d7ff
+
+
+/*
+ * U+20000 - U+2A6DF : CJK Unified Ideographs Extension B
+ */
+
+GRAPH     0x20000 - 0x2a6d6
+PRINT     0x20000 - 0x2a6d6
+IDEOGRAM  0x20000 - 0x2a6d6
+SWIDTH2   0x20000 - 0x2a6d6
+
+
+/*
+ * U+2F800 - U+2FA1F : CJK Compatibility Ideographs Supplement
+ */
+
+GRAPH     0x2f800 - 0x2fa1d
+PRINT     0x2f800 - 0x2fa1d
+IDEOGRAM  0x2f800 - 0x2fa1d
+SWIDTH2   0x2f800 - 0x2fa1d
+
+
+/*
+ * U+E0000 - U+E007F : Tags
+ */
+
+CONTROL   0xe0001  0xe0020 - 0xe007f
+
+
+/*
+ * U+F0000 - U+FFFFF : Supplementary Private Use Area-A
+ */
+
+GRAPH     0xf0000 - 0xffffd
+PRINT     0xf0000 - 0xffffd
+SWIDTH1   0xf0000 - 0xffffd
+
+
+/*
+ * U+100000 - U+10FFFF : Supplementary Private Use Area-B
+ */
+
+GRAPH     0x100000 - 0x10fffd
+PRINT     0x100000 - 0x10fffd
+SWIDTH1   0x100000 - 0x10fffd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/extern.h	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+int yylex(void);
+int yyparse(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/ldef.h	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include "runefile.h"
+#include "_ctype.h"
+#include "wctype.h"
+
+/*
+ * This should look a LOT like a _RuneEntry
+ */
+typedef struct rune_list {
+    int32_t		min;
+    int32_t 		max;
+    int32_t 		map;
+    uint32_t		*types;
+    struct rune_list	*next;
+} rune_list;
+
+typedef struct rune_map {
+    uint32_t		map[_CACHED_RUNES];
+    rune_list		*root;
+} rune_map;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/mkctype_lex.l	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,169 @@
+%{
+/*-
+ * Copyright (c) 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "ldef.h"
+#include "mkctype_yacc.tab.h"
+#include "extern.h"
+%}
+
+ODIGIT	[0-7]
+DIGIT	[0-9]
+XDIGIT	[0-9a-fA-F]
+W	[\t\n\r ]
+
+%%
+\'.\'				{ yylval.rune = (unsigned char)yytext[1];
+				  return(RUNE); }
+
+'\\a'				{ yylval.rune = '\a';
+				  return(RUNE); }
+'\\b'				{ yylval.rune = '\b';
+				  return(RUNE); }
+'\\f'				{ yylval.rune = '\f';
+				  return(RUNE); }
+'\\n'				{ yylval.rune = '\n';
+				  return(RUNE); }
+'\\r'				{ yylval.rune = '\r';
+				  return(RUNE); }
+'\\t'				{ yylval.rune = '\t';
+				  return(RUNE); }
+'\\v'				{ yylval.rune = '\v';
+				  return(RUNE); }
+
+0x{XDIGIT}+			{ yylval.rune = strtol(yytext, 0, 16);
+				  return(RUNE); }
+0{ODIGIT}+			{ yylval.rune = strtol(yytext, 0, 8);
+				  return(RUNE); }
+{DIGIT}+			{ yylval.rune = strtol(yytext, 0, 10);
+				  return(RUNE); }
+
+
+MAPLOWER			{ return(MAPLOWER); }
+MAPUPPER			{ return(MAPUPPER); }
+TODIGIT				{ return(DIGITMAP); }
+INVALID				{ return(INVALID); }
+
+ALPHA				{ yylval.i = _CTYPE_A|_CTYPE_R|_CTYPE_G; 
+				  return(LIST); }
+CONTROL				{ yylval.i = _ISCNTRL;
+				  return(LIST); }
+DIGIT				{ yylval.i = _ISDIGIT|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+GRAPH				{ yylval.i = _ISGRAPH|_ISPRINT;
+				  return(LIST); }
+LOWER				{ yylval.i = _ISLOWER|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+PUNCT				{ yylval.i = _ISPUNCT|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+SPACE				{ yylval.i = _ISSPACE;
+				  return(LIST); }
+UPPER				{ yylval.i = _ISUPPER|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+XDIGIT				{ yylval.i = _ISXDIGIT|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+BLANK				{ yylval.i = _ISBLANK;
+				  return(LIST); }
+PRINT				{ yylval.i = _ISPRINT;
+				  return(LIST); }
+IDEOGRAM			{ yylval.i = _E2|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+SPECIAL				{ yylval.i = _E5|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+PHONOGRAM			{ yylval.i = _E1|_ISPRINT|_ISGRAPH;
+				  return(LIST); }
+SWIDTH0				{ yylval.i = _CTYPE_SW0; return(LIST); }
+SWIDTH1				{ yylval.i = _CTYPE_SW1; return(LIST); }
+SWIDTH2				{ yylval.i = _CTYPE_SW2; return(LIST); }
+SWIDTH3				{ yylval.i = _CTYPE_SW3; return(LIST); }
+
+VARIABLE[\t ]			{ static char vbuf[1024];
+				  char *v = vbuf;
+				  while (((*v = input()) != 0) && (*v != '\n'))
+					++v;
+                                  if (*v) {
+					unput(*v);
+					*v = 0;
+				  }
+				  yylval.str = vbuf;
+				  return(VARIABLE);
+				}
+
+ENCODING			{ return(ENCODING); }
+
+\".*\"				{ char *e = yytext + 1;
+				  yylval.str = e;
+				  while (*e && *e != '"')
+					++e;
+				  *e = 0;
+				  return(STRING); }
+
+\<|\(|\[			{ return(LBRK); }
+
+\>|\)|\]			{ return(RBRK); }
+
+\-				{ return(THRU); }
+\.\.\.				{ return(THRU); }
+
+\:				{ return(':'); }
+
+{W}+				;
+
+^\#.*\n				;
+\/\*				{ char lc = 0;
+				  do {
+				    while ((lc) != '*')
+					if ((lc = input()) == 0)
+					    break;
+				  } while((lc = input()) != '/');
+				}
+
+\\$				;
+.				{ (void) printf("Lex is skipping '%s'\n",
+				  yytext); }
+%%
+
+#if	!defined(yywrap)
+int
+yywrap(void)
+{
+	return(1);
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/ctype/mkctype_yacc.y	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,848 @@
+%{
+/*-
+ * Copyright (c) 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Paul Borman at Krystal Technologies.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <arpa/inet.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "ldef.h"
+#include "extern.h"
+#include "runefile.h"
+
+static void *xmalloc(unsigned int sz);
+static uint32_t *xlalloc(unsigned int sz);
+void yyerror(const char *s);
+static uint32_t *xrelalloc(uint32_t *old, unsigned int sz);
+static void dump_tables(void);
+static void cleanout(void);
+
+const char	*locale_file = "<stdout>";
+
+rune_map	maplower = { { 0 }, NULL };
+rune_map	mapupper = { { 0 }, NULL };
+rune_map	types = { { 0 }, NULL };
+
+_FileRuneLocale	new_locale = { 0 };
+char		*variable = NULL;
+
+void set_map(rune_map *, rune_list *, uint32_t);
+void add_map(rune_map *, rune_list *, uint32_t);
+static void usage(void);
+%}
+
+%union	{
+    int32_t	rune;
+    int		i;
+    char	*str;
+
+    rune_list	*list;
+}
+
+%token	<rune>	RUNE
+%token		LBRK
+%token		RBRK
+%token		THRU
+%token		MAPLOWER
+%token		MAPUPPER
+%token		DIGITMAP
+%token	<i>	LIST
+%token	<str>	VARIABLE
+%token		ENCODING
+%token		INVALID
+%token	<str>	STRING
+
+%type	<list>	list
+%type	<list>	map
+
+
+%%
+
+locale	:	/* empty */
+	|	table
+	    	{ dump_tables(); }
+	;
+
+table	:	entry
+	|	table entry
+	;
+
+entry	:	ENCODING STRING
+		{ if (strcmp($2, "NONE") &&
+		      strcmp($2, "ASCII") &&
+		      strcmp($2, "UTF-8") &&
+		      strcmp($2, "EUC") &&
+		      strcmp($2, "GBK") &&
+		      strcmp($2, "GB18030") &&
+		      strcmp($2, "GB2312") &&
+		      strcmp($2, "BIG5") &&
+		      strcmp($2, "MSKanji"))
+			warnx("ENCODING %s is not supported by libc", $2);
+		(void) strncpy(new_locale.encoding, $2,
+		    sizeof(new_locale.encoding)); }
+	|	VARIABLE
+		{ new_locale.variable_len = strlen($1) + 1;
+		  variable = xmalloc(new_locale.variable_len);
+		  (void) strcpy(variable, $1);
+		}
+	|	INVALID RUNE
+		{ warnx("the INVALID keyword is deprecated"); }
+	|	LIST list
+		{ set_map(&types, $2, $1); }
+	|	MAPLOWER map
+		{ set_map(&maplower, $2, 0); }
+	|	MAPUPPER map
+		{ set_map(&mapupper, $2, 0); }
+	|	DIGITMAP map
+		{ if (debug)
+			warnx("this system does not support DIGITMAP");
+		}
+	;
+
+list	:	RUNE
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $1;
+		    $$->max = $1;
+		    $$->next = 0;
+		}
+	|	RUNE THRU RUNE
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $1;
+		    $$->max = $3;
+		    $$->next = 0;
+		}
+	|	list RUNE
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $2;
+		    $$->max = $2;
+		    $$->next = $1;
+		}
+	|	list RUNE THRU RUNE
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $2;
+		    $$->max = $4;
+		    $$->next = $1;
+		}
+	;
+
+map	:	LBRK RUNE RUNE RBRK
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $2;
+		    $$->max = $2;
+		    $$->map = $3;
+		    $$->next = 0;
+		}
+	|	map LBRK RUNE RUNE RBRK
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $3;
+		    $$->max = $3;
+		    $$->map = $4;
+		    $$->next = $1;
+		}
+	|	LBRK RUNE THRU RUNE ':' RUNE RBRK
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $2;
+		    $$->max = $4;
+		    $$->map = $6;
+		    $$->next = 0;
+		}
+	|	map LBRK RUNE THRU RUNE ':' RUNE RBRK
+		{
+		    $$ = (rune_list *)xmalloc(sizeof(rune_list));
+		    $$->min = $3;
+		    $$->max = $5;
+		    $$->map = $7;
+		    $$->next = $1;
+		}
+	;
+%%
+
+int debug;
+FILE *fp;
+
+static void
+cleanout(void)
+{
+    if (fp != NULL)
+	(void) unlink(locale_file);
+}
+
+int
+main(int ac, char *av[])
+{
+    int x;
+
+    fp = stdout;
+
+    while ((x = getopt(ac, av, "do:")) != -1) {
+	switch(x) {
+	case 'd':
+	    debug = 1;
+	    break;
+	case 'o':
+	    locale_file = optarg;
+	    if ((fp = fopen(locale_file, "w")) == NULL)
+		err(1, "%s", locale_file);
+	    (void) atexit(cleanout);
+	    break;
+	default:
+	    usage();
+	}
+    }
+
+    switch (ac - optind) {
+    case 0:
+	break;
+    case 1:
+	if (freopen(av[optind], "r", stdin) == 0)
+	    err(1, "%s", av[optind]);
+	break;
+    default:
+	usage();
+    }
+    for (x = 0; x < _CACHED_RUNES; ++x) {
+	mapupper.map[x] = x;
+	maplower.map[x] = x;
+    }
+    (void) memcpy(new_locale.magic, _FILE_RUNE_MAGIC_1,
+	sizeof(new_locale.magic));
+
+    (void) yyparse();
+
+    return(0);
+}
+
+static void
+usage(void)
+{
+    (void) fprintf(stderr, "usage: mklocale [-d] [-o output] [source]\n");
+    exit(1);
+}
+
+void
+yyerror(const char *s)
+{
+    (void) fprintf(stderr, "%s\n", s);
+}
+
+static void *
+xmalloc(unsigned int sz)
+{
+    void *r = malloc(sz);
+    if (!r)
+	errx(1, "xmalloc");
+    return(r);
+}
+
+static uint32_t *
+xlalloc(unsigned int sz)
+{
+    uint32_t *r = (uint32_t *)malloc(sz * sizeof(uint32_t));
+    if (!r)
+	errx(1, "xlalloc");
+    return(r);
+}
+
+static uint32_t *
+xrelalloc(uint32_t *old, unsigned int sz)
+{
+    uint32_t *r = (uint32_t *)realloc((char *)old,
+						sz * sizeof(uint32_t));
+    if (!r)
+	errx(1, "xrelalloc");
+    return(r);
+}
+
+void
+set_map(rune_map *map, rune_list *list, uint32_t flag)
+{
+    while (list) {
+	rune_list *nlist = list->next;
+	add_map(map, list, flag);
+	list = nlist;
+    }
+}
+
+void
+add_map(rune_map *map, rune_list *list, uint32_t flag)
+{
+    int32_t i;
+    rune_list *lr = 0;
+    rune_list *r;
+    int32_t run;
+
+    while (list->min < _CACHED_RUNES && list->min <= list->max) {
+	if (flag)
+	    map->map[list->min++] |= flag;
+	else
+	    map->map[list->min++] = list->map++;
+    }
+
+    if (list->min > list->max) {
+	free(list);
+	return;
+    }
+
+    run = list->max - list->min + 1;
+
+    if (!(r = map->root) || (list->max < r->min - 1)
+			 || (!flag && list->max == r->min - 1)) {
+	if (flag) {
+	    list->types = xlalloc(run);
+	    for (i = 0; i < run; ++i)
+		list->types[i] = flag;
+	}
+	list->next = map->root;
+	map->root = list;
+	return;
+    }
+
+    for (r = map->root; r && r->max + 1 < list->min; r = r->next)
+	lr = r;
+
+    if (!r) {
+	/*
+	 * We are off the end.
+	 */
+	if (flag) {
+	    list->types = xlalloc(run);
+	    for (i = 0; i < run; ++i)
+		list->types[i] = flag;
+	}
+	list->next = 0;
+	lr->next = list;
+	return;
+    }
+
+    if (list->max < r->min - 1) {
+	/*
+	 * We come before this range and we do not intersect it.
+	 * We are not before the root node, it was checked before the loop
+	 */
+	if (flag) {
+	    list->types = xlalloc(run);
+	    for (i = 0; i < run; ++i)
+		list->types[i] = flag;
+	}
+	list->next = lr->next;
+	lr->next = list;
+	return;
+    }
+
+    /*
+     * At this point we have found that we at least intersect with
+     * the range pointed to by `r', we might intersect with one or
+     * more ranges beyond `r' as well.
+     */
+
+    if (!flag && list->map - list->min != r->map - r->min) {
+	/*
+	 * There are only two cases when we are doing case maps and
+	 * our maps needn't have the same offset.  When we are adjoining
+	 * but not intersecting.
+	 */
+	if (list->max + 1 == r->min) {
+	    lr->next = list;
+	    list->next = r;
+	    return;
+	}
+	if (list->min - 1 == r->max) {
+	    list->next = r->next;
+	    r->next = list;
+	    return;
+	}
+	errx(1, "error: conflicting map entries");
+    }
+
+    if (list->min >= r->min && list->max <= r->max) {
+	/*
+	 * Subset case.
+	 */
+
+	if (flag) {
+	    for (i = list->min; i <= list->max; ++i)
+		r->types[i - r->min] |= flag;
+	}
+	free(list);
+	return;
+    }
+    if (list->min <= r->min && list->max >= r->max) {
+	/*
+	 * Superset case.  Make him big enough to hold us.
+	 * We might need to merge with the guy after him.
+	 */
+	if (flag) {
+	    list->types = xlalloc(list->max - list->min + 1);
+
+	    for (i = list->min; i <= list->max; ++i)
+		list->types[i - list->min] = flag;
+
+	    for (i = r->min; i <= r->max; ++i)
+		list->types[i - list->min] |= r->types[i - r->min];
+
+	    free(r->types);
+	    r->types = list->types;
+	} else {
+	    r->map = list->map;
+	}
+	r->min = list->min;
+	r->max = list->max;
+	free(list);
+    } else if (list->min < r->min) {
+	/*
+	 * Our tail intersects his head.
+	 */
+	if (flag) {
+	    list->types = xlalloc(r->max - list->min + 1);
+
+	    for (i = r->min; i <= r->max; ++i)
+		list->types[i - list->min] = r->types[i - r->min];
+
+	    for (i = list->min; i < r->min; ++i)
+		list->types[i - list->min] = flag;
+
+	    for (i = r->min; i <= list->max; ++i)
+		list->types[i - list->min] |= flag;
+
+	    free(r->types);
+	    r->types = list->types;
+	} else {
+	    r->map = list->map;
+	}
+	r->min = list->min;
+	free(list);
+	return;
+    } else {
+	/*
+	 * Our head intersects his tail.
+	 * We might need to merge with the guy after him.
+	 */
+	if (flag) {
+	    r->types = xrelalloc(r->types, list->max - r->min + 1);
+
+	    for (i = list->min; i <= r->max; ++i)
+		r->types[i - r->min] |= flag;
+
+	    for (i = r->max+1; i <= list->max; ++i)
+		r->types[i - r->min] = flag;
+	}
+	r->max = list->max;
+	free(list);
+    }
+
+    /*
+     * Okay, check to see if we grew into the next guy(s)
+     */
+    while (((lr = r->next) != 0) && r->max >= lr->min) {
+	if (flag) {
+	    if (r->max >= lr->max) {
+		/*
+		 * Good, we consumed all of him.
+		 */
+		for (i = lr->min; i <= lr->max; ++i)
+		    r->types[i - r->min] |= lr->types[i - lr->min];
+	    } else {
+		/*
+		 * "append" him on to the end of us.
+		 */
+		r->types = xrelalloc(r->types, lr->max - r->min + 1);
+
+		for (i = lr->min; i <= r->max; ++i)
+		    r->types[i - r->min] |= lr->types[i - lr->min];
+
+		for (i = r->max+1; i <= lr->max; ++i)
+		    r->types[i - r->min] = lr->types[i - lr->min];
+
+		r->max = lr->max;
+	    }
+	} else {
+	    if (lr->max > r->max)
+		r->max = lr->max;
+	}
+
+	r->next = lr->next;
+
+	if (flag)
+	    free(lr->types);
+	free(lr);
+    }
+}
+
+static void
+dump_tables(void)
+{
+    int x, first_d, curr_d;
+    rune_list *list;
+
+    /*
+     * See if we can compress some of the istype arrays
+     */
+    for(list = types.root; list; list = list->next) {
+	list->map = list->types[0];
+	for (x = 1; x < list->max - list->min + 1; ++x) {
+	    if ((int32_t)list->types[x] != list->map) {
+		list->map = 0;
+		break;
+	    }
+	}
+    }
+
+    first_d = curr_d = -1;
+    for (x = 0; x < _CACHED_RUNES; ++x) {
+	uint32_t r = types.map[x];
+
+	if (r & _CTYPE_D) {
+		if (first_d < 0)
+			first_d = curr_d = x;
+		else if (x != curr_d + 1)
+			errx(1, "error: DIGIT range is not contiguous");
+		else if (x - first_d > 9)
+			errx(1, "error: DIGIT range is too big");
+		else
+			curr_d++;
+		if (!(r & _CTYPE_X))
+			errx(1,
+			"error: DIGIT range is not a subset of XDIGIT range");
+	}
+    }
+    if (first_d < 0)
+	errx(1, "error: no DIGIT range defined in the single byte area");
+    else if (curr_d - first_d < 9)
+	errx(1, "error: DIGIT range is too small in the single byte area");
+
+    /*
+     * Fill in our tables.  Do this in network order so that
+     * diverse machines have a chance of sharing data.
+     * (Machines like Crays cannot share with little machines due to
+     *  word size.  Sigh.  We tried.)
+     */
+    for (x = 0; x < _CACHED_RUNES; ++x) {
+	new_locale.runetype[x] = htonl(types.map[x]);
+	new_locale.maplower[x] = htonl(maplower.map[x]);
+	new_locale.mapupper[x] = htonl(mapupper.map[x]);
+    }
+
+    /*
+     * Count up how many ranges we will need for each of the extents.
+     */
+    list = types.root;
+
+    while (list) {
+	new_locale.runetype_ext_nranges++;
+	list = list->next;
+    }
+    new_locale.runetype_ext_nranges =
+         htonl(new_locale.runetype_ext_nranges);
+
+    list = maplower.root;
+
+    while (list) {
+	new_locale.maplower_ext_nranges++;
+	list = list->next;
+    }
+    new_locale.maplower_ext_nranges =
+        htonl(new_locale.maplower_ext_nranges);
+
+    list = mapupper.root;
+
+    while (list) {
+	new_locale.mapupper_ext_nranges++;
+	list = list->next;
+    }
+    new_locale.mapupper_ext_nranges =
+        htonl(new_locale.mapupper_ext_nranges);
+
+    new_locale.variable_len = htonl(new_locale.variable_len);
+
+    /*
+     * Okay, we are now ready to write the new locale file.
+     */
+
+    /*
+     * PART 1: The _FileRuneLocale structure
+     */
+    if (fwrite((char *)&new_locale, sizeof(new_locale), 1, fp) != 1) {
+	perror(locale_file);
+	exit(1);
+    }
+    /*
+     * PART 2: The runetype_ext structures (not the actual tables)
+     */
+    list = types.root;
+
+    while (list) {
+	_FileRuneEntry re;
+
+	re.min = htonl(list->min);
+	re.max = htonl(list->max);
+	re.map = htonl(list->map);
+
+	if (fwrite((char *)&re, sizeof(re), 1, fp) != 1) {
+	    perror(locale_file);
+	    exit(1);
+	}
+
+        list = list->next;
+    }
+    /*
+     * PART 3: The maplower_ext structures
+     */
+    list = maplower.root;
+
+    while (list) {
+	_FileRuneEntry re;
+
+	re.min = htonl(list->min);
+	re.max = htonl(list->max);
+	re.map = htonl(list->map);
+
+	if (fwrite((char *)&re, sizeof(re), 1, fp) != 1) {
+	    perror(locale_file);
+	    exit(1);
+	}
+
+        list = list->next;
+    }
+    /*
+     * PART 4: The mapupper_ext structures
+     */
+    list = mapupper.root;
+
+    while (list) {
+	_FileRuneEntry re;
+
+	re.min = htonl(list->min);
+	re.max = htonl(list->max);
+	re.map = htonl(list->map);
+
+	if (fwrite((char *)&re, sizeof(re), 1, fp) != 1) {
+	    perror(locale_file);
+	    exit(1);
+	}
+
+        list = list->next;
+    }
+    /*
+     * PART 5: The runetype_ext tables
+     */
+    list = types.root;
+
+    while (list) {
+	for (x = 0; x < list->max - list->min + 1; ++x)
+	    list->types[x] = htonl(list->types[x]);
+
+	if (!list->map) {
+	    if (fwrite((char *)list->types,
+		       (list->max - list->min + 1) * sizeof(uint32_t),
+		       1, fp) != 1) {
+		perror(locale_file);
+		exit(1);
+	    }
+	}
+        list = list->next;
+    }
+    /*
+     * PART 6: And finally the variable data
+     */
+    if (new_locale.variable_len != 0 &&
+	fwrite(variable, ntohl(new_locale.variable_len), 1, fp) != 1) {
+	perror(locale_file);
+	exit(1);
+    }
+    if (fclose(fp) != 0) {
+	perror(locale_file);
+	exit(1);
+    }
+    fp = NULL;
+
+    if (!debug)
+	return;
+
+    if (new_locale.encoding[0])
+	(void) fprintf(stderr, "ENCODING	%s\n", new_locale.encoding);
+    if (variable)
+	(void) fprintf(stderr, "VARIABLE	%s\n", variable);
+
+    (void) fprintf(stderr, "\nMAPLOWER:\n\n");
+
+    for (x = 0; x < _CACHED_RUNES; ++x) {
+	if (isprint(maplower.map[x]))
+	    (void) fprintf(stderr, " '%c'", (int)maplower.map[x]);
+	else if (maplower.map[x])
+	    (void) fprintf(stderr, "%04x", maplower.map[x]);
+	else
+	    (void) fprintf(stderr, "%4x", 0);
+	if ((x & 0xf) == 0xf)
+	    (void) fprintf(stderr, "\n");
+	else
+	    (void) fprintf(stderr, " ");
+    }
+    (void) fprintf(stderr, "\n");
+
+    for (list = maplower.root; list; list = list->next)
+	(void) fprintf(stderr, "\t%04x - %04x : %04x\n",
+	    list->min, list->max, list->map);
+
+    (void) fprintf(stderr, "\nMAPUPPER:\n\n");
+
+    for (x = 0; x < _CACHED_RUNES; ++x) {
+	if (isprint(mapupper.map[x]))
+	    (void) fprintf(stderr, " '%c'", (int)mapupper.map[x]);
+	else if (mapupper.map[x])
+	    (void) fprintf(stderr, "%04x", mapupper.map[x]);
+	else
+	    (void) fprintf(stderr, "%4x", 0);
+	if ((x & 0xf) == 0xf)
+	    (void) fprintf(stderr, "\n");
+	else
+	    (void) fprintf(stderr, " ");
+    }
+    (void) fprintf(stderr, "\n");
+
+    for (list = mapupper.root; list; list = list->next)
+	(void) fprintf(stderr, "\t%04x - %04x : %04x\n",
+	    list->min, list->max, list->map);
+
+
+    (void) fprintf(stderr, "\nTYPES:\n\n");
+
+    for (x = 0; x < _CACHED_RUNES; ++x) {
+	uint32_t r = types.map[x];
+
+	if (r) {
+	    if (isprint(x))
+		(void) fprintf(stderr, " '%c': %2d", x, (int)(r & 0xff));
+	    else
+		(void) fprintf(stderr, "%04x: %2d", x, (int)(r & 0xff));
+
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_A) ? "alph" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_C) ? "ctrl" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_D) ? "dig" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_G) ? "graf" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_L) ? "low" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_P) ? "punc" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_S) ? "spac" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_U) ? "upp" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_X) ? "xdig" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_B) ? "blnk" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_R) ? "prnt" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_I) ? "ideo" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_T) ? "spec" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_Q) ? "phon" : "");
+	    (void) fprintf(stderr, "\n");
+	}
+    }
+
+    for (list = types.root; list; list = list->next) {
+	if (list->map && list->min + 3 < list->max) {
+	    uint32_t r = list->map;
+
+	    (void) fprintf(stderr, "%04x: %2d",
+		(uint32_t)list->min, (int)(r & 0xff));
+
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_A) ? "alph" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_C) ? "ctrl" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_D) ? "dig" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_G) ? "graf" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_L) ? "low" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_P) ? "punc" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_S) ? "spac" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_U) ? "upp" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_X) ? "xdig" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_B) ? "blnk" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_R) ? "prnt" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_I) ? "ideo" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_T) ? "spec" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_Q) ? "phon" : "");
+	    (void) fprintf(stderr, "\n...\n");
+
+	    (void) fprintf(stderr, "%04x: %2d",
+		(uint32_t)list->max, (int)(r & 0xff));
+
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_A) ? "alph" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_C) ? "ctrl" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_D) ? "dig" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_G) ? "graf" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_L) ? "low" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_P) ? "punc" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_S) ? "spac" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_U) ? "upp" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_X) ? "xdig" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_B) ? "blnk" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_R) ? "prnt" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_I) ? "ideo" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_T) ? "spec" : "");
+	    (void) fprintf(stderr, " %4s", (r & _CTYPE_Q) ? "phon" : "");
+	    (void) fprintf(stderr, "\n");
+	} else 
+	for (x = list->min; x <= list->max; ++x) {
+	    uint32_t r = ntohl(list->types[x - list->min]);
+
+	    if (r) {
+		(void) fprintf(stderr, "%04x: %2d", x, (int)(r & 0xff));
+
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_A) ? "alph" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_C) ? "ctrl" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_D) ? "dig" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_G) ? "graf" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_L) ? "low" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_P) ? "punc" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_S) ? "spac" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_U) ? "upp" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_X) ? "xdig" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_B) ? "blnk" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_R) ? "prnt" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_I) ? "ideo" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_T) ? "spec" : "");
+		(void) fprintf(stderr, " %4s", (r & _CTYPE_Q) ? "phon" : "");
+		(void) fprintf(stderr, "\n");
+	    }
+	}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/messages/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,53 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+CATEGORY=LC_MESSAGES
+
+include ../Makefile.common
+
+en_COMMON =	en_AU en_CA en_GB en_NZ en_US
+
+en_ASCII =	$(en_COMMON:%=%.US-ASCII)
+en_LATIN1 =	$(en_COMMON:%=%.ISO8859-1)
+en_LATIN15 =	$(en_COMMON:%=%.ISO8859-15)
+en_UTF8 =	$(en_COMMON:%=%.UTF-8) en_IE.UTF-8
+en_LOCALES =	$(en_ASCII) $(en_LATIN1) $(en_LATIN15) $(en_UTF8)
+
+.KEEP_STATE:
+
+all: $(MACH) .WAIT $(MACHLOCALES)
+
+$(ASCII:%=$(MACH)/%):	$(MACH)/US-ASCII
+	$(RM) $@
+	$(LN) $(MACH)/US-ASCII $@
+
+$(en_LOCALES:%=$(MACH)/%):	$(MACH)/en
+	$(RM) $@
+	$(LN) $(MACH)/en $@
+
+clean:
+	$(RM) $(OBJS) $(CLEANFILES)
+	$(RM) -r $(MACH)
+
+lint:
+check:
+
+
+#
+# Rules for building encoding data files.
+#
+$(MACH)/%:	data/%.src $(MACH)
+	$(INS.nohash)
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/messages/data/en.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,16 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# Note: FreeBSD had customizations for CA and US to add French and Spanish
+# prefixes, but that that really isn't appropriate for an English locale.
+#
+# yesexpr
+^[yY].*
+# noexpr
+^[nN].*
+# yesstr
+yes
+# nostr
+no
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,65 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+CATEGORY=LC_MONETARY
+
+include ../Makefile.common
+
+en_AU =		en_AU.ISO8859-1 en_AU.ISO8859-15 en_AU.US-ASCII en_AU.UTF-8
+en_CA =		en_CA.ISO8859-1 en_CA.ISO8859-15 en_CA.US-ASCII en_CA.UTF-8
+en_GB =		en_GB.ISO8859-1 en_GB.ISO8859-15 en_GB.US-ASCII en_GB.UTF-8
+en_IE =		en_IE.UTF-8
+en_NZ =		en_NZ.ISO8859-1 en_NZ.ISO8859-15 en_NZ.US-ASCII en_NZ.UTF-8
+en_US =		en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII en_US.UTF-8
+
+.KEEP_STATE:
+
+all: $(MACH) .WAIT $(MACHLOCALES)
+
+clean:
+	$(RM) $(OBJS) $(CLEANFILES)
+	$(RM) -r $(MACH)
+
+lint:
+check:
+
+#
+# Rules for building encoding data files.
+#
+
+$(en_AU:%=$(MACH)/%):	data/en_AU.src
+	$(RM) $@; $(HASHSTRIP) data/en_AU.src > $@
+
+$(en_CA:%=$(MACH)/%):	data/en_CA.src
+	$(RM) $@; $(HASHSTRIP) data/en_CA.src > $@
+
+$(en_NZ:%=$(MACH)/%):	data/en_NZ.src
+	$(RM) $@; $(HASHSTRIP) data/en_NZ.src > $@
+
+$(en_US:%=$(MACH)/%):	data/en_US.src
+	$(RM) $@; $(HASHSTRIP) data/en_US.src > $@
+
+$(MACH)/en_IE.UTF-8:	data/en_IE.UTF-8.src
+	$(RM) $@; $(HASHSTRIP) data/en_IE.UTF-8.src > $@
+
+$(MACH)/en_GB.UTF-8:	data/en_GB.UTF-8.src
+	$(RM) $@; $(HASHSTRIP) data/en_GB.UTF-8.src > $@
+
+$(MACH)/en_GB.ISO8859-1 $(MACH)/en_GB.ISO8859-15:	data/en_GB.LATIN.src
+	$(RM) $@; $(HASHSTRIP) data/en_GB.LATIN.src > $@
+
+$(MACH)/en_GB.US-ASCII	data/en_GB.ASCII.src:
+	$(RM) $@; $(HASHSTRIP) data/en_GB.ASCII.src > $@
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_AU.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,47 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+AUD 
+# currency_symbol
+$
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# int_p_cs_precedes
+1
+# int_n_cs_precedes;
+1
+# int_p_sep_by_space;
+0
+# int_n_sep_by_space;
+0
+# int_p_sign_posn;
+1
+# int_n_sign_posn;
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_CA.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+CAD 
+# currency_symbol
+$
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_GB.ASCII.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+GBP 
+# currency_symbol
+GBP 
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_GB.LATIN.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+GBP 
+# currency_symbol

+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_GB.UTF-8.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+GBP 
+# currency_symbol
+£
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_IE.UTF-8.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+EUR 
+# currency_symbol
+€
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_NZ.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+NZD 
+# currency_symbol
+$
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/monetary/data/en_US.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,35 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# int_curr_symbol (last character always SPACE)
+USD 
+# currency_symbol
+$
+# mon_decimal_point
+.
+# mon_thousands_sep
+,
+# mon_grouping, separated by ;
+3;3
+# positive_sign
+
+# negative_sign
+-
+# int_frac_digits
+2
+# frac_digits
+2
+# p_cs_precedes
+1
+# p_sep_by_space
+0
+# n_cs_precedes
+1
+# n_sep_by_space
+0
+# p_sign_posn
+1
+# n_sign_posn
+1
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/numeric/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,53 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+CATEGORY=LC_NUMERIC
+
+include ../Makefile.common
+
+en_COMMON =	en_AU en_CA en_GB en_NZ en_US
+
+en_ASCII =	$(en_COMMON:%=%.US-ASCII)
+en_LATIN1 =	$(en_COMMON:%=%.ISO8859-1)
+en_LATIN15 =	$(en_COMMON:%=%.ISO8859-15)
+en_UTF8 =	$(en_COMMON:%=%.UTF-8) en_IE.UTF-8
+en_LOCALES =	$(en_ASCII) $(en_LATIN1) $(en_LATIN15) $(en_UTF8)
+
+.KEEP_STATE:
+
+all: $(MACH) .WAIT $(MACHLOCALES)
+
+$(ASCII:%=$(MACH)/%):	$(MACH)/US-ASCII
+	$(RM) $@
+	$(LN) $(MACH)/US-ASCII $@
+
+$(en_LOCALES:%=$(MACH)/%):	$(MACH)/en
+	$(RM) $@
+	$(LN) $(MACH)/en $@
+
+clean:
+	$(RM) $(OBJS) $(CLEANFILES)
+	$(RM) -r $(MACH)
+
+lint:
+check:
+
+
+#
+# Rules for building encoding data files.
+#
+$(MACH)/%:	data/%.src $(MACH)
+	$(INS.nohash)
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/numeric/data/en.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,11 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# decimal_point
+.
+# thousands_sep
+,
+# grouping, separated by ;
+3;3
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/time/Makefile	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,49 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+CATEGORY=LC_TIME
+
+include ../Makefile.common
+
+# Apparently only the US uses month/day/year.  Other English speaking
+# countries place day/month/year.
+en_GB = en_AU.ISO8859-1 en_AU.ISO8859-15 en_AU.US-ASCII en_AU.UTF-8 \
+	en_CA.ISO8859-1 en_CA.ISO8859-15 en_CA.US-ASCII en_CA.UTF-8 \
+	en_GB.ISO8859-1 en_GB.ISO8859-15 en_GB.US-ASCII en_GB.UTF-8 \
+	en_IE.UTF-8 \
+	en_NZ.ISO8859-1 en_NZ.ISO8859-15 en_NZ.US-ASCII en_NZ.UTF-8
+en_US =	en_US.ISO8859-1 en_US.ISO8859-15 en_US.US-ASCII en_US.UTF-8
+
+.KEEP_STATE:
+
+all: $(MACH) .WAIT $(MACHLOCALES)
+
+clean:
+	$(RM) $(OBJS) $(CLEANFILES)
+	$(RM) -r $(MACH)
+
+lint:
+check:
+
+#
+# Rules for building encoding data files.
+#
+
+$(en_GB:%=$(MACH)/%):	data/en_GB.src
+	$(RM) $@; $(HASHSTRIP) data/en_GB.src > $@
+
+$(en_US:%=$(MACH)/%):	data/en_US.src
+	$(RM) $@; $(HASHSTRIP) data/en_US.src > $@
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/time/data/en_GB.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,101 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# Short month names
+#
+Jan
+Feb
+Mar
+Apr
+May
+Jun
+Jul
+Aug
+Sep
+Oct
+Nov
+Dec
+#
+# Long month names (as in a date)
+#
+January
+February
+March
+April
+May
+June
+July
+August
+September
+October
+November
+December
+#
+# Short weekday names
+#
+Sun
+Mon
+Tue
+Wed
+Thu
+Fri
+Sat
+#
+# Long weekday names
+#
+Sunday
+Monday
+Tuesday
+Wednesday
+Thursday
+Friday
+Saturday
+#
+# X_fmt
+#
+%H:%M:%S
+#
+# x_fmt
+#
+%d/%m/%Y
+#
+# c_fmt
+#
+%a %e %b %X %Y
+#
+# am
+#
+AM
+#
+# pm
+#
+PM
+#
+# date_fmt
+#
+%a %e %b %Y %X %Z
+#
+# Long month names (without case ending)
+#
+January
+February
+March
+April
+May
+June
+July
+August
+September
+October
+November
+December
+#
+# md_order
+#
+dm
+#
+# ampm_fmt
+#
+%I:%M:%S %p
+# EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/mklocale/time/data/en_US.src	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,101 @@
+#
+# WARNING: spaces may be essential at the end of lines
+# WARNING: empty lines are essential too
+#
+# Short month names
+#
+Jan
+Feb
+Mar
+Apr
+May
+Jun
+Jul
+Aug
+Sep
+Oct
+Nov
+Dec
+#
+# Long month names (as in a date)
+#
+January
+February
+March
+April
+May
+June
+July
+August
+September
+October
+November
+December
+#
+# Short weekday names
+#
+Sun
+Mon
+Tue
+Wed
+Thu
+Fri
+Sat
+#
+# Long weekday names
+#
+Sunday
+Monday
+Tuesday
+Wednesday
+Thursday
+Friday
+Saturday
+#
+# X_fmt
+#
+%H:%M:%S
+#
+# x_fmt
+#
+%m/%d/%Y
+#
+# c_fmt
+#
+%a %b %e %X %Y
+#
+# am
+#
+AM
+#
+# pm
+#
+PM
+#
+# date_fmt
+#
+%a %b %e %X %Z %Y
+#
+# Long month names (without case ending)
+#
+January
+February
+March
+April
+May
+June
+July
+August
+September
+October
+November
+December
+#
+# md_order
+#
+md
+#
+# ampm_fmt
+#
+%I:%M:%S %p
+# EOF
--- a/usr/src/lib/libc/port/locale/collate.c	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/lib/libc/port/locale/collate.c	Mon Aug 30 23:48:20 2010 -0700
@@ -27,7 +27,6 @@
 
 /*
  * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
- * Use is subject to license terms.
  */
 
 #include "lint.h"
@@ -79,12 +78,9 @@
 	 * Slurp the locale file into the cache.
 	 */
 
-	/* 'PathLocale' must be already set & checked. */
-	/* Range checking not needed, encoding has fixed size */
-	(void) strcpy(buf, _PathLocale);
-	(void) strcat(buf, "/");
-	(void) strcat(buf, encoding);
-	(void) strcat(buf, "/LC_COLLATE");
+	(void) snprintf(buf, sizeof (buf), "%s/%s/LC_COLLATE/LCL_DATA",
+	    _PathLocale, encoding);
+
 	if ((fp = fopen(buf, "r")) == NULL)
 		return (_LDP_ERROR);
 
--- a/usr/src/lib/libc/port/locale/ldpart.c	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/lib/libc/port/locale/ldpart.c	Mon Aug 30 23:48:20 2010 -0700
@@ -26,7 +26,6 @@
 
 /*
  * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
- * Use is subject to license terms.
  */
 
 #include "lint.h"
@@ -39,6 +38,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <stdio.h>
 
 #include "ldpart.h"
 #include "setlocale.h"
@@ -79,12 +79,9 @@
 
 	/* 'PathLocale' must be already set & checked. */
 
-	/* Range checking not needed, 'name' size is limited */
-	(void) strcpy(filename, _PathLocale);
-	(void) strcat(filename, "/");
-	(void) strcat(filename, name);
-	(void) strcat(filename, "/");
-	(void) strcat(filename, category_filename);
+	(void) snprintf(filename, sizeof (filename), "%s/%s/%s/LCL_DATA",
+	    _PathLocale, name, category_filename);
+
 	if ((fd = open(filename, O_RDONLY)) < 0)
 		return (_LDP_ERROR);
 	if (fstat(fd, &st) != 0)
--- a/usr/src/lib/libc/port/locale/setlocale.c	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/lib/libc/port/locale/setlocale.c	Mon Aug 30 23:48:20 2010 -0700
@@ -33,7 +33,6 @@
 
 /*
  * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
- * Use is subject to license terms.
  */
 
 #include "lint.h"
--- a/usr/src/lib/libc/port/locale/setrunelocale.c	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/lib/libc/port/locale/setrunelocale.c	Mon Aug 30 23:48:20 2010 -0700
@@ -32,7 +32,6 @@
 
 /*
  * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
- * Use is subject to license terms.
  */
 
 #include "lint.h"
@@ -112,11 +111,8 @@
 	 * Slurp the locale file into the cache.
 	 */
 
-	/* Range checking not needed, encoding length already checked before */
-	(void) strcpy(name, _PathLocale);
-	(void) strcat(name, "/");
-	(void) strcat(name, encoding);
-	(void) strcat(name, "/LC_CTYPE");
+	(void) snprintf(name, sizeof (name), "%s/%s/LC_CTYPE/LCL_DATA",
+	    _PathLocale, encoding);
 
 	if ((fp = fopen(name, "r")) == NULL)
 		return (errno == 0 ? ENOENT : errno);
--- a/usr/src/pkg/manifests/SUNWcs.mf	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/pkg/manifests/SUNWcs.mf	Mon Aug 30 23:48:20 2010 -0700
@@ -199,9 +199,6 @@
 dir path=usr/lib/locale/C/LC_MONETARY
 dir path=usr/lib/locale/C/LC_NUMERIC
 dir path=usr/lib/locale/C/LC_TIME
-dir path=usr/lib/localedef
-dir path=usr/lib/localedef/extensions
-dir path=usr/lib/localedef/src
 dir path=usr/lib/netsvc group=sys
 dir path=usr/lib/pci
 dir path=usr/lib/rcm
@@ -816,7 +813,6 @@
 file path=usr/bin/listdgrp mode=0555
 file path=usr/bin/listusers mode=0555
 file path=usr/bin/loadkeys mode=0555
-file path=usr/bin/localedef mode=0555
 file path=usr/bin/logger mode=0555
 file path=usr/bin/login mode=4555
 file path=usr/bin/logins mode=0750
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkg/manifests/locale-en.mf	Mon Aug 30 23:48:20 2010 -0700
@@ -0,0 +1,297 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL)".  You may
+# only use this file in accordance with the terms of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy is of the CDDL is also available via the Internet
+# at http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
+#
+
+set name=pkg.fmri value=pkg:/locale/en@$(PKGVERS)
+set name=pkg.description value="localization definitions for English locales"
+set name=pkg.summary value="English Locales"
+set name=info.classification \
+    value=org.opensolaris.category.2008:System/Localizations
+set name=variant.arch value=$(ARCH)
+dir path=usr group=sys
+dir path=usr/lib
+dir path=usr/lib/locale
+dir path=usr/lib/locale/en_AU.ISO8859-1
+dir path=usr/lib/locale/en_AU.ISO8859-1/LC_COLLATE
+dir path=usr/lib/locale/en_AU.ISO8859-1/LC_CTYPE
+dir path=usr/lib/locale/en_AU.ISO8859-1/LC_MESSAGES
+dir path=usr/lib/locale/en_AU.ISO8859-1/LC_MONETARY
+dir path=usr/lib/locale/en_AU.ISO8859-1/LC_NUMERIC
+dir path=usr/lib/locale/en_AU.ISO8859-1/LC_TIME
+dir path=usr/lib/locale/en_AU.ISO8859-15
+dir path=usr/lib/locale/en_AU.ISO8859-15/LC_COLLATE
+dir path=usr/lib/locale/en_AU.ISO8859-15/LC_CTYPE
+dir path=usr/lib/locale/en_AU.ISO8859-15/LC_MESSAGES
+dir path=usr/lib/locale/en_AU.ISO8859-15/LC_MONETARY
+dir path=usr/lib/locale/en_AU.ISO8859-15/LC_NUMERIC
+dir path=usr/lib/locale/en_AU.ISO8859-15/LC_TIME
+dir path=usr/lib/locale/en_AU.US-ASCII
+dir path=usr/lib/locale/en_AU.US-ASCII/LC_COLLATE
+dir path=usr/lib/locale/en_AU.US-ASCII/LC_CTYPE
+dir path=usr/lib/locale/en_AU.US-ASCII/LC_MESSAGES
+dir path=usr/lib/locale/en_AU.US-ASCII/LC_MONETARY
+dir path=usr/lib/locale/en_AU.US-ASCII/LC_NUMERIC
+dir path=usr/lib/locale/en_AU.US-ASCII/LC_TIME
+dir path=usr/lib/locale/en_AU.UTF-8
+dir path=usr/lib/locale/en_AU.UTF-8/LC_COLLATE
+dir path=usr/lib/locale/en_AU.UTF-8/LC_CTYPE
+dir path=usr/lib/locale/en_AU.UTF-8/LC_MESSAGES
+dir path=usr/lib/locale/en_AU.UTF-8/LC_MONETARY
+dir path=usr/lib/locale/en_AU.UTF-8/LC_NUMERIC
+dir path=usr/lib/locale/en_AU.UTF-8/LC_TIME
+dir path=usr/lib/locale/en_CA.ISO8859-1
+dir path=usr/lib/locale/en_CA.ISO8859-1/LC_COLLATE
+dir path=usr/lib/locale/en_CA.ISO8859-1/LC_CTYPE
+dir path=usr/lib/locale/en_CA.ISO8859-1/LC_MESSAGES
+dir path=usr/lib/locale/en_CA.ISO8859-1/LC_MONETARY
+dir path=usr/lib/locale/en_CA.ISO8859-1/LC_NUMERIC
+dir path=usr/lib/locale/en_CA.ISO8859-1/LC_TIME
+dir path=usr/lib/locale/en_CA.ISO8859-15
+dir path=usr/lib/locale/en_CA.ISO8859-15/LC_COLLATE
+dir path=usr/lib/locale/en_CA.ISO8859-15/LC_CTYPE
+dir path=usr/lib/locale/en_CA.ISO8859-15/LC_MESSAGES
+dir path=usr/lib/locale/en_CA.ISO8859-15/LC_MONETARY
+dir path=usr/lib/locale/en_CA.ISO8859-15/LC_NUMERIC
+dir path=usr/lib/locale/en_CA.ISO8859-15/LC_TIME
+dir path=usr/lib/locale/en_CA.US-ASCII
+dir path=usr/lib/locale/en_CA.US-ASCII/LC_COLLATE
+dir path=usr/lib/locale/en_CA.US-ASCII/LC_CTYPE
+dir path=usr/lib/locale/en_CA.US-ASCII/LC_MESSAGES
+dir path=usr/lib/locale/en_CA.US-ASCII/LC_MONETARY
+dir path=usr/lib/locale/en_CA.US-ASCII/LC_NUMERIC
+dir path=usr/lib/locale/en_CA.US-ASCII/LC_TIME
+dir path=usr/lib/locale/en_CA.UTF-8
+dir path=usr/lib/locale/en_CA.UTF-8/LC_COLLATE
+dir path=usr/lib/locale/en_CA.UTF-8/LC_CTYPE
+dir path=usr/lib/locale/en_CA.UTF-8/LC_MESSAGES
+dir path=usr/lib/locale/en_CA.UTF-8/LC_MONETARY
+dir path=usr/lib/locale/en_CA.UTF-8/LC_NUMERIC
+dir path=usr/lib/locale/en_CA.UTF-8/LC_TIME
+dir path=usr/lib/locale/en_GB.ISO8859-1
+dir path=usr/lib/locale/en_GB.ISO8859-1/LC_COLLATE
+dir path=usr/lib/locale/en_GB.ISO8859-1/LC_CTYPE
+dir path=usr/lib/locale/en_GB.ISO8859-1/LC_MESSAGES
+dir path=usr/lib/locale/en_GB.ISO8859-1/LC_MONETARY
+dir path=usr/lib/locale/en_GB.ISO8859-1/LC_NUMERIC
+dir path=usr/lib/locale/en_GB.ISO8859-1/LC_TIME
+dir path=usr/lib/locale/en_GB.ISO8859-15
+dir path=usr/lib/locale/en_GB.ISO8859-15/LC_COLLATE
+dir path=usr/lib/locale/en_GB.ISO8859-15/LC_CTYPE
+dir path=usr/lib/locale/en_GB.ISO8859-15/LC_MESSAGES
+dir path=usr/lib/locale/en_GB.ISO8859-15/LC_MONETARY
+dir path=usr/lib/locale/en_GB.ISO8859-15/LC_NUMERIC
+dir path=usr/lib/locale/en_GB.ISO8859-15/LC_TIME
+dir path=usr/lib/locale/en_GB.US-ASCII
+dir path=usr/lib/locale/en_GB.US-ASCII/LC_COLLATE
+dir path=usr/lib/locale/en_GB.US-ASCII/LC_CTYPE
+dir path=usr/lib/locale/en_GB.US-ASCII/LC_MESSAGES
+dir path=usr/lib/locale/en_GB.US-ASCII/LC_MONETARY
+dir path=usr/lib/locale/en_GB.US-ASCII/LC_NUMERIC
+dir path=usr/lib/locale/en_GB.US-ASCII/LC_TIME
+dir path=usr/lib/locale/en_GB.UTF-8
+dir path=usr/lib/locale/en_GB.UTF-8/LC_COLLATE
+dir path=usr/lib/locale/en_GB.UTF-8/LC_CTYPE
+dir path=usr/lib/locale/en_GB.UTF-8/LC_MESSAGES
+dir path=usr/lib/locale/en_GB.UTF-8/LC_MONETARY
+dir path=usr/lib/locale/en_GB.UTF-8/LC_NUMERIC
+dir path=usr/lib/locale/en_GB.UTF-8/LC_TIME
+dir path=usr/lib/locale/en_IE.UTF-8
+dir path=usr/lib/locale/en_IE.UTF-8/LC_COLLATE
+dir path=usr/lib/locale/en_IE.UTF-8/LC_CTYPE
+dir path=usr/lib/locale/en_IE.UTF-8/LC_MESSAGES
+dir path=usr/lib/locale/en_IE.UTF-8/LC_MONETARY
+dir path=usr/lib/locale/en_IE.UTF-8/LC_NUMERIC
+dir path=usr/lib/locale/en_IE.UTF-8/LC_TIME
+dir path=usr/lib/locale/en_NZ.ISO8859-1
+dir path=usr/lib/locale/en_NZ.ISO8859-1/LC_COLLATE
+dir path=usr/lib/locale/en_NZ.ISO8859-1/LC_CTYPE
+dir path=usr/lib/locale/en_NZ.ISO8859-1/LC_MESSAGES
+dir path=usr/lib/locale/en_NZ.ISO8859-1/LC_MONETARY
+dir path=usr/lib/locale/en_NZ.ISO8859-1/LC_NUMERIC
+dir path=usr/lib/locale/en_NZ.ISO8859-1/LC_TIME
+dir path=usr/lib/locale/en_NZ.ISO8859-15
+dir path=usr/lib/locale/en_NZ.ISO8859-15/LC_COLLATE
+dir path=usr/lib/locale/en_NZ.ISO8859-15/LC_CTYPE
+dir path=usr/lib/locale/en_NZ.ISO8859-15/LC_MESSAGES
+dir path=usr/lib/locale/en_NZ.ISO8859-15/LC_MONETARY
+dir path=usr/lib/locale/en_NZ.ISO8859-15/LC_NUMERIC
+dir path=usr/lib/locale/en_NZ.ISO8859-15/LC_TIME
+dir path=usr/lib/locale/en_NZ.US-ASCII
+dir path=usr/lib/locale/en_NZ.US-ASCII/LC_COLLATE
+dir path=usr/lib/locale/en_NZ.US-ASCII/LC_CTYPE
+dir path=usr/lib/locale/en_NZ.US-ASCII/LC_MESSAGES
+dir path=usr/lib/locale/en_NZ.US-ASCII/LC_MONETARY
+dir path=usr/lib/locale/en_NZ.US-ASCII/LC_NUMERIC
+dir path=usr/lib/locale/en_NZ.US-ASCII/LC_TIME
+dir path=usr/lib/locale/en_NZ.UTF-8
+dir path=usr/lib/locale/en_NZ.UTF-8/LC_COLLATE
+dir path=usr/lib/locale/en_NZ.UTF-8/LC_CTYPE
+dir path=usr/lib/locale/en_NZ.UTF-8/LC_MESSAGES
+dir path=usr/lib/locale/en_NZ.UTF-8/LC_MONETARY
+dir path=usr/lib/locale/en_NZ.UTF-8/LC_NUMERIC
+dir path=usr/lib/locale/en_NZ.UTF-8/LC_TIME
+dir path=usr/lib/locale/en_US.ISO8859-1
+dir path=usr/lib/locale/en_US.ISO8859-1/LC_COLLATE
+dir path=usr/lib/locale/en_US.ISO8859-1/LC_CTYPE
+dir path=usr/lib/locale/en_US.ISO8859-1/LC_MESSAGES
+dir path=usr/lib/locale/en_US.ISO8859-1/LC_MONETARY
+dir path=usr/lib/locale/en_US.ISO8859-1/LC_NUMERIC
+dir path=usr/lib/locale/en_US.ISO8859-1/LC_TIME
+dir path=usr/lib/locale/en_US.ISO8859-15
+dir path=usr/lib/locale/en_US.ISO8859-15/LC_COLLATE
+dir path=usr/lib/locale/en_US.ISO8859-15/LC_CTYPE
+dir path=usr/lib/locale/en_US.ISO8859-15/LC_MESSAGES
+dir path=usr/lib/locale/en_US.ISO8859-15/LC_MONETARY
+dir path=usr/lib/locale/en_US.ISO8859-15/LC_NUMERIC
+dir path=usr/lib/locale/en_US.ISO8859-15/LC_TIME
+dir path=usr/lib/locale/en_US.US-ASCII
+dir path=usr/lib/locale/en_US.US-ASCII/LC_COLLATE
+dir path=usr/lib/locale/en_US.US-ASCII/LC_CTYPE
+dir path=usr/lib/locale/en_US.US-ASCII/LC_MESSAGES
+dir path=usr/lib/locale/en_US.US-ASCII/LC_MONETARY
+dir path=usr/lib/locale/en_US.US-ASCII/LC_NUMERIC
+dir path=usr/lib/locale/en_US.US-ASCII/LC_TIME
+dir path=usr/lib/locale/en_US.UTF-8
+dir path=usr/lib/locale/en_US.UTF-8/LC_COLLATE
+dir path=usr/lib/locale/en_US.UTF-8/LC_CTYPE
+dir path=usr/lib/locale/en_US.UTF-8/LC_MESSAGES
+dir path=usr/lib/locale/en_US.UTF-8/LC_MONETARY
+dir path=usr/lib/locale/en_US.UTF-8/LC_NUMERIC
+dir path=usr/lib/locale/en_US.UTF-8/LC_TIME
+file path=usr/lib/locale/en_AU.ISO8859-1/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-1/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-1/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-1/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-1/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-1/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-15/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-15/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-15/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-15/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-15/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.ISO8859-15/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.US-ASCII/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.US-ASCII/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.US-ASCII/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.US-ASCII/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.US-ASCII/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.US-ASCII/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.UTF-8/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.UTF-8/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.UTF-8/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.UTF-8/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.UTF-8/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_AU.UTF-8/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-1/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-1/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-1/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-1/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-1/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-1/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-15/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-15/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-15/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-15/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-15/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.ISO8859-15/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.US-ASCII/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.US-ASCII/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.US-ASCII/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.US-ASCII/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.US-ASCII/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.US-ASCII/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.UTF-8/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.UTF-8/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.UTF-8/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.UTF-8/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.UTF-8/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_CA.UTF-8/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-1/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-1/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-1/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-1/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-1/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-1/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-15/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-15/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-15/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-15/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-15/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.ISO8859-15/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.US-ASCII/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.US-ASCII/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.US-ASCII/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.US-ASCII/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.US-ASCII/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.US-ASCII/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.UTF-8/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.UTF-8/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.UTF-8/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.UTF-8/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.UTF-8/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_GB.UTF-8/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_IE.UTF-8/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_IE.UTF-8/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_IE.UTF-8/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_IE.UTF-8/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_IE.UTF-8/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_IE.UTF-8/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-1/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-1/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-1/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-1/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-1/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-1/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-15/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-15/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-15/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-15/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-15/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.ISO8859-15/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.US-ASCII/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.US-ASCII/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.US-ASCII/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.US-ASCII/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.US-ASCII/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.US-ASCII/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.UTF-8/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.UTF-8/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.UTF-8/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.UTF-8/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.UTF-8/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_NZ.UTF-8/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-1/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-1/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-1/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-1/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-1/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-1/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-15/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-15/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-15/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-15/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-15/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.ISO8859-15/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.US-ASCII/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.US-ASCII/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.US-ASCII/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.US-ASCII/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.US-ASCII/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.US-ASCII/LC_TIME/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.UTF-8/LC_COLLATE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.UTF-8/LC_CTYPE/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.UTF-8/LC_MESSAGES/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.UTF-8/LC_MONETARY/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.UTF-8/LC_NUMERIC/LCL_DATA mode=0444
+file path=usr/lib/locale/en_US.UTF-8/LC_TIME/LCL_DATA mode=0444
+license lic_CDDL license=lic_CDDL
--- a/usr/src/pkg/manifests/text-locale.mf	Tue Aug 31 01:26:06 2010 -0400
+++ b/usr/src/pkg/manifests/text-locale.mf	Mon Aug 30 23:48:20 2010 -0700
@@ -38,13 +38,6 @@
 dir path=usr/lib/iconv/geniconvtbl
 dir path=usr/lib/iconv/geniconvtbl/binarytables
 dir path=usr/lib/iconv/geniconvtbl/srcs
-dir path=usr/lib/locale
-dir path=usr/lib/locale/iso_8859_1
-dir path=usr/lib/locale/iso_8859_1/$(ARCH64)
-dir path=usr/lib/locale/iso_8859_1/LC_CTYPE
-dir path=usr/lib/localedef
-dir path=usr/lib/localedef/src
-dir path=usr/lib/localedef/src/iso_8859_1
 file path=usr/bin/gencat mode=0555
 file path=usr/bin/genmsg mode=0555
 file path=usr/bin/gettxt mode=0555
@@ -66,11 +59,6 @@
 file path=usr/lib/iconv/geniconvtbl/srcs/ISO8859-1_to_UTF-8.src mode=0444
 file path=usr/lib/iconv/geniconvtbl/srcs/UTF-8_to_ISO8859-1.src mode=0444
 file path=usr/lib/iconv/geniconvtbl/srcs/eucJP_to_ISO-2022-JP.src mode=0444
-file path=usr/lib/locale/iso_8859_1/$(ARCH64)/iso_8859_1.so.3 mode=0555
-file path=usr/lib/locale/iso_8859_1/iso_8859_1.so.3 mode=0555
-file path=usr/lib/localedef/src/iso_8859_1/charmap.src mode=0444
-file path=usr/lib/localedef/src/iso_8859_1/extension.src mode=0444
-file path=usr/lib/localedef/src/iso_8859_1/localedef.src mode=0444
 legacy pkg=SUNWloc \
     desc="localization utilities and C locale (POSIX default) definitions" \
     name="System Localization"