aboutsummaryrefslogtreecommitdiff
path: root/libX11/specs/i18n/framework
diff options
context:
space:
mode:
Diffstat (limited to 'libX11/specs/i18n/framework')
-rw-r--r--libX11/specs/i18n/framework/framework.xml3240
1 files changed, 1620 insertions, 1620 deletions
diff --git a/libX11/specs/i18n/framework/framework.xml b/libX11/specs/i18n/framework/framework.xml
index ab1dac6b6..97a8264e9 100644
--- a/libX11/specs/i18n/framework/framework.xml
+++ b/libX11/specs/i18n/framework/framework.xml
@@ -1,1620 +1,1620 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
- "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
-
-<book id="framework">
-
-<bookinfo>
- <title>X11R6 Sample Implementation Frame Work</title>
- <releaseinfo>X Version 11, Release 7</releaseinfo>
- <authorgroup>
- <othercredit>
- <firstname>Katsuhisa</firstname><surname>Yano</surname>
- <affiliation><orgname>TOSHIBA Corporation</orgname></affiliation>
- </othercredit>
- <othercredit>
- <firstname>Yoshio</firstname><surname>Horiuchi</surname>
- <affiliation><orgname>IBM Japan</orgname></affiliation>
- </othercredit>
- </authorgroup>
- <copyright><year>1994</year><holder>TOSHIBA Corporation</holder></copyright>
- <copyright><year>1994</year><holder>IBM Corporation</holder></copyright>
-
-<legalnotice>
-
-<para>
-Permission to use, copy, modify, and distribute this documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice and this permission notice appear in all copies. TOSHIBA Corporation and
-IBM Corporation make no representations about the suitability for any purpose of the information in this document.
-This documentation is provided as is without express or implied warranty.
-</para>
-
-<para>
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files
-(the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following
-conditions:
-</para>
-
-<para>
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-</para>
-
-<para>
-THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-</para>
-
-<para>
-Except as contained in this notice, the name of The Open Group shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from X Consortium.
-</para>
-
-<para>X Window System is a trademark of The Open Group.</para>
-
-</legalnotice>
-</bookinfo>
-
-<chapter id="framework_">
-<title>Framework</title>
-<sect1 id="preface">
-<title>Preface</title>
-<para>
-This document proposes to define the structures, methods and their
-signatures that are expected to be common to all locale dependent
-functions within the Xlib sample implementation. The following
-illustration (Fig.1) <!-- xref --> is proposed to outline the separating of
-the components within the sample implementation.
-</para>
-
-<para>
-Preface drawing.
-</para>
-
-<mediaobject id="framework_locale_service_api_proposal">
- <imageobject>
- <imagedata width="540px" depth="530px" contentwidth="560px" contentdepth="550px" format="SVG" fileref="framework.svg"/>
- </imageobject>
- <caption>Frame work of Locale Service API Proposal</caption>
-</mediaobject>
-
-<para>
-Generally speaking, the internationalized portion of Xlib (Locale
-Dependent X, LDX) consists of three objects;
-locale (LC) , input method (IM) and output method (OM).
-The LC provides a set of information that depends on user's language
-environment. The IM manages text inputing, and the OM manages text
-drawing. Both IM and OM highly depend on LC data.
-</para>
-
-<para>
-In X11R5, there are two sample implementations, Ximp and Xsi, for
-Xlib internationalization. But in both implementations, IM and OM
-actually refer the private extension of LC. It breaks coexistence
-of these two sample implementations. For example, if a user creates
-a new OM for special purpose as a part of Ximp, it will not work with
-Xsi.
-</para>
-
-<para>
-As a solution of this problem, we propose to define the standard
-APIs between these three objects, and define the structure that are
-common to these objects.
-</para>
-</sect1>
-
-<sect1 id="Objective">
-<title>Objective</title>
-
-<itemizedlist>
- <listitem>
- <para>
-Explain the current X11R6 sample implementation
- </para>
- </listitem>
- <listitem>
- <para>
-Document the common set of locale dependent interfaces
- </para>
- </listitem>
- <listitem>
- <para>
-Provide more flexible pluggable layer
- </para>
- </listitem>
-</itemizedlist>
-</sect1>
-
-<sect1 id="Locale_Object_Binding_Functions">
-<title>Locale Object Binding Functions</title>
-<!-- .XS (SN Locale Object Binding Functions -->
-<!-- .XE -->
-<para>
-This chapter describes functions related locale object binding for
-implementing the pluggable layer.
-</para>
-
-<para>
-A locale loader is an entry point for locale object, which
-instantiates XLCd object and binds locale methods with specified
-locale name. The behavior of loader is implementation dependent.
-And, what kind of loaders are available is also implementation
-dependent.
-</para>
-
-<para>
-<!-- .LP -->
-The loader is called in
-<function>_XOpenLC, </function>
-but caller of
-<function>_XOpenLC </function>
-does not need to care about its inside. For example, if the loader is
-implemented with dynamic load functions, and the dynamic module is
-expected to be unloaded when the corresponding XLCd is freed,
-close methods of XLCdMethods should handle unloading.
-</para>
-
-<para>
-<emphasis role="bold">Initializing a locale loader list</emphasis>
-</para>
-
-<para>void _XlcInitLoader</para>
-
-
-<para>
-The
-<function>_XlcInitLoader</function>
-function initializes the locale loader list with vendor specific
-manner. Each loader is registered with calling
-<function>_XlcAddLoader.</function>
-The number of loaders and their order in the loader list is
-implementation dependent.
-</para>
-
-<para>
-<emphasis role="bold">Add a loader</emphasis>
-</para>
-
-<literallayout>
-typedef XLCd (*XLCdLoadProc)(<emphasis remap='I'>name</emphasis>);
- char <emphasis remap='I'>*name</emphasis>;
-
-typedef int XlcPosition;
-
-#define XlcHead
-#define XlcTail
-</literallayout>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function> _XlcAddLoader</function></funcdef>
- <paramdef>XLCdLoadProc<parameter> proc</parameter></paramdef>
- <paramdef>XlcPosition<parameter> position</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcAddLoader</function>
-function registers the specified locale loader "<emphasis remap='I'>proc</emphasis>" to the
-internal loader list. The position specifies that the loader
-"<emphasis remap='I'>proc</emphasis>" should be placed in the top of the loader list(XlcHead)
-or last(XlcTail).
-</para>
-
-<para>
-The object loader is called from the top of the loader list in order,
-when calling time.
-</para>
-
-<para>
-<function>Remove a loader</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcRemoveLoader</function></funcdef>
- <paramdef>XLCdLoadProc<parameter> proc</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcRemoveLoader</function>
-function removes the locale loader specified by "<emphasis remap='I'>proc</emphasis>" from the
-loader list.
-</para>
-
-<para>
-Current implementation provides following locale loaders;
-</para>
-
-<literallayout>
-<function>_XlcDefaultLoader</function>
-<function>_XlcGenericLoader</function>
-<function>_XlcEucLoader</function>
-<function>_XlcSjisLoader</function>
-<function>_XlcUtfLoader</function>
-<function>_XaixOsDynamicLoad</function>
-</literallayout>
-
-</sect1>
-
-<sect1 id="Locale_Method_Interface">
-<title>Locale Method Interface</title>
-
-<para>
-This chapter describes the locale method API, which is a set of
-accessible functions from both IM and OM parts.
-The locale method API provides the functionalities; obtaining locale
-dependent information, handling charset, converting text, etc.
-</para>
-
-<para>
-As a result of using these APIs instead of accessing vender private
-extension of the locale object, we can keep locale, IM and OM
-independently each other.
-</para>
-
-</sect1>
-
-<sect1 id="Locale_Method_Functions">
-<title>Locale Method Functions</title>
-<para>
-<function>Open a Locale Method</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>XLCd <function> _XOpenLC</function></funcdef>
- <paramdef>char<parameter> *name</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XOpenLC</function>
-function opens a locale method which corresponds to the
-specified locale name.
-<function>_XOpenLC</function>
-calls a locale object loader, which is registered via
-<function>_XlcAddLoader into the internal loader list. If the called loader </function>
-is valid and successfully opens a locale,
-<function>_XOpenLC</function>
-returns the XLCd. If the loader is invalid or failed to open a locale,
-<function>_XOpenLC</function>
-calls the next loader. If all registered loaders cannot open a locale,
-<function>_XOpenLC</function>
-returns NULL.
-</para>
-
-<para>XLCd _XlcCurrentLC</para>
-
-<para>
-The
-<function>_XlcCurrentLC</function>
-function returns an XLCd that are bound to current locale.
-</para>
-
-<para>
-<emphasis role="bold">Close a Locale Method</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XCloseLC</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<!-- .LP -->
-The
-<function>_XCloseLC</function>
-function close a locale method the specified lcd.
-</para>
-
-<para>
-<emphasis role="bold">Obtain Locale Method values</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>char *<function>_XGetLCValues</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XGetLCValues</function>
-function returns NULL if no error occurred; otherwise, it returns the
-name of the first argument that could not be obtained.
-The following values are defined as standard arguments. Other values
-are implementation dependent.
-</para>
-
-<informaltable frame="none">
- <tgroup cols='3' align='left'>
- <colspec colname='c1' colwidth="3*" colsep="0"/>
- <colspec colname='c2' colwidth="1*" colsep="0"/>
- <colspec colname='c3' colwidth="3*" colsep="0"/>
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Type</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row rowsep="0">
- <entry>XlcNCodeset</entry>
- <entry>char*</entry>
- <entry>codeset part of locale name</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNDefaultString</entry>
- <entry>char*</entry>
- <entry>XDefaultString()</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNEncodingName</entry>
- <entry>char*</entry>
- <entry>encoding name</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNLanguage</entry>
- <entry>char*</entry>
- <entry>language part of locale name</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNMbCurMax</entry>
- <entry>int</entry>
- <entry>ANSI C MB_CUR_MAX</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNStateDependentEncoding</entry>
- <entry>Bool</entry>
- <entry>is state-dependent encoding or not</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNTerritory</entry>
- <entry>char*</entry>
- <entry>territory part of locale name</entry>
- </row>
- </tbody>
- </tgroup>
-</informaltable>
-
-</sect1>
-
-<sect1 id="Charset_functions">
-<title>Charset functions</title>
-<para>
-The XlcCharSet is an identifier which represents a subset of characters
-(character set) in the locale object.
-</para>
-
-<literallayout class="monospaced">
-typedef enum {
- XlcUnknown, XlcC0, XlcGL, XlcC1, XlcGR, XlcGLGR, XlcOther
-} XlcSide;
-
-typedef struct _XlcCharSetRec *XlcCharSet;
-
-typedef struct {
- char *name;
- XPointer value;
-} XlcArg, *XlcArgList;
-
-typedef char* (*XlcGetCSValuesProc)(<emphasis remap='I'>charset</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>);
- XlcCharSet <emphasis remap='I'>charset</emphasis>;
- XlcArgList <emphasis remap='I'>args</emphasis>;
- int <emphasis remap='I'>num_args</emphasis>;
-
-typedef struct _XlcCharSetRec {
- char *name;
- XrmQuark xrm_name;
- char *encoding_name;
- XrmQuark xrm_encoding_name;
- XlcSide side;
- int char_size;
- int set_size;
- char *ct_sequence;
- XlcGetCSValuesProc get_values;
-} XlcCharSetRec;
-</literallayout>
-
-<para>
-<emphasis role="bold">Get an XlcCharSet</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>XlcCharSet <function> _XlcGetCharSet</function></funcdef>
- <paramdef>char<parameter> *name</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcGetCharSet</function>
-function gets an XlcCharSet which corresponds to the charset name
-specified by "<emphasis remap='I'>name</emphasis>".
-<function>_XlcGetCharSet </function>
-returns NULL, if no XlcCharSet bound to specified "<emphasis remap='I'>name</emphasis>".
-</para>
-
-<para>
-The following character sets are pre-registered.
-</para>
-
-<informaltable frame="none">
- <tgroup cols='2' align='left'>
- <colspec colname='c1' colwidth="1*" colsep="0"/>
- <colspec colname='c2' colwidth="2*" colsep="0"/>
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row rowsep="0">
- <entry>ISO8859-1:GL</entry>
- <entry>7-bit ASCII graphics (ANSI X3.4-1968),</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>Left half of ISO 8859 sets</entry>
- </row>
- <row rowsep="0">
- <entry>JISX0201.1976-0:GL</entry>
- <entry>Left half of JIS X0201-1976 (reaffirmed 1984),</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>8-Bit Alphanumeric-Katakana Code</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-1:GR</entry>
- <entry>Right half of ISO 8859-1, Latin alphabet No. 1</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-2:GR</entry>
- <entry>Right half of ISO 8859-2, Latin alphabet No. 2</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-3:GR</entry>
- <entry>Right half of ISO 8859-3, Latin alphabet No. 3</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-4:GR</entry>
- <entry>Right half of ISO 8859-4, Latin alphabet No. 4</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-7:GR</entry>
- <entry>Right half of ISO 8859-7, Latin/Greek alphabet</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-6:GR</entry>
- <entry>Right half of ISO 8859-6, Latin/Arabic alphabet</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-8:GR</entry>
- <entry>Right half of ISO 8859-8, Latin/Hebrew alphabet</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-5:GR</entry>
- <entry>Right half of ISO 8859-5, Latin/Cyrillic alphabet</entry>
- </row>
- <row rowsep="0">
- <entry>ISO8859-9:GR</entry>
- <entry>Right half of ISO 8859-9, Latin alphabet No. 5</entry>
- </row>
- <row rowsep="0">
- <entry>JISX0201.1976-0:GR</entry>
- <entry>Right half of JIS X0201-1976 (reaffirmed 1984),</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>8-Bit Alphanumeric-Katakana Code</entry>
- </row>
- <row rowsep="0">
- <entry>GB2312.1980-0:GL</entry>
- <entry>GB2312-1980, China (PRC) Hanzi defined as GL</entry>
- </row>
- <row rowsep="0">
- <entry>GB2312.1980-0:GR</entry>
- <entry>GB2312-1980, China (PRC) Hanzi defined as GR</entry>
- </row>
- <row rowsep="0">
- <entry>JISX0208.1983-0:GL</entry>
- <entry>JIS X0208-1983, Japanese Graphic Character Set</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>defined as GL</entry>
- </row>
- <row rowsep="0">
- <entry>JISX0208.1983-0:GR</entry>
- <entry>JIS X0208-1983, Japanese Graphic Character Set</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>defined as GR</entry>
- </row>
- <row rowsep="0">
- <entry>KSC5601.1987-0:GL</entry>
- <entry>KS C5601-1987, Korean Graphic Character Set</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>defined as GL</entry>
- </row>
- <row rowsep="0">
- <entry>KSC5601.1987-0:GR</entry>
- <entry>KS C5601-1987, Korean Graphic Character Set</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>defined as GR</entry>
- </row>
- <row rowsep="0">
- <entry>JISX0212.1990-0:GL</entry>
- <entry>JIS X0212-1990, Japanese Graphic Character Set</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>defined as GL</entry>
- </row>
- <row rowsep="0">
- <entry>JISX0212.1990-0:GR</entry>
- <entry>JIS X0212-1990, Japanese Graphic Character Set</entry>
- </row>
- <row rowsep="0">
- <entry></entry>
- <entry>defined as GR</entry>
- </row>
- </tbody>
- </tgroup>
-</informaltable>
-
-<para>
-<emphasis role="bold">Add an XlcCharSet</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function> _XlcAddCharSet</function></funcdef>
- <paramdef>XlcCharSet<parameter> charset</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcAddCharSet</function>
-function registers XlcCharSet specified by "<emphasis remap='I'>charset</emphasis>".
-</para>
-
-<para>
-<!-- .LP -->
-<!-- .sp -->
-<function>Obtain Character Set values</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>char * <function> _XlcGetCSValues</function></funcdef>
- <paramdef>XlcCharSet<parameter> charset</parameter></paramdef>
- <paramdef><parameter> ...</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcGetCSValues</function>
-function returns NULL if no error occurred;
-otherwise, it returns the name of the first argument that could not
-be obtained. The following values are defined as standard arguments.
-Other values are implementation dependent.
-</para>
-
-<informaltable frame="none">
- <tgroup cols='3' align='left'>
- <colspec colname='c1' colwidth="3*" colsep="0"/>
- <colspec colname='c2' colwidth="1*" colsep="0"/>
- <colspec colname='c3' colwidth="3*" colsep="0"/>
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Type</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row rowsep="0">
- <entry>XlcNName</entry>
- <entry>char*</entry>
- <entry>charset name</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNEncodingName</entry>
- <entry>char*</entry>
- <entry>XLFD CharSet Registry and Encoding</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNSide</entry>
- <entry>XlcSide</entry>
- <entry>charset side (GL, GR, ...)</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNCharSize</entry>
- <entry>int</entry>
- <entry>number of octets per character</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNSetSize</entry>
- <entry>int</entry>
- <entry>number of character sets</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNControlSequence</entry>
- <entry>char*</entry>
- <entry>control sequence of Compound Text</entry>
- </row>
- </tbody>
- </tgroup>
-</informaltable>
-
-</sect1>
-
-<sect1 id="Converter_Functions">
-<title>Converter Functions</title>
-<para>
-We provide a set of the common converter APIs, that are independent
-from both of source and destination text type.
-</para>
-
-<literallayout class="monospaced">
-typedef struct _XlcConvRec *XlcConv;
-
-typedef void (*XlcCloseConverterProc)(<emphasis remap='I'>conv</emphasis>);
- XlcConv <emphasis remap='I'>conv</emphasis>;
-
-typedef int (*XlcConvertProc)(<emphasis remap='I'>conv</emphasis>, <emphasis remap='I'>from</emphasis>, <emphasis remap='I'>from_left</emphasis>, <emphasis remap='I'>to</emphasis>, <emphasis remap='I'>to_left</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>);
- XlcConv <emphasis remap='I'>conv</emphasis>;
- XPointer <emphasis remap='I'>*from</emphasis>;
- int <emphasis remap='I'>*from_left</emphasis>;
- XPointer <emphasis remap='I'>*to</emphasis>;
- int <emphasis remap='I'>*to_left</emphasis>;
- XPointer <emphasis remap='I'>*args</emphasis>;
- int <emphasis remap='I'>num_args</emphasis>;
-
-typedef void (*XlcResetConverterProc)(<emphasis remap='I'>conv</emphasis>);
- XlcConv <emphasis remap='I'>conv</emphasis>;
-
-typedef struct _XlcConvMethodsRec {
- XlcCloseConverterProc close;
- XlcConvertProc convert;
- XlcResetConverterProc reset;
-} XlcConvMethodsRec, *XlcConvMethods;
-
-typedef struct _XlcConvRec {
- XlcConvMethods methods;
- XPointer state;
-} XlcConvRec;
-</literallayout>
-
-<para>
-<function>Open a converter</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>XlcConv <function> _XlcOpenConverter</function></funcdef>
- <paramdef>XLCd<parameter> from_lcd</parameter></paramdef>
- <paramdef>char<parameter> *from_type</parameter></paramdef>
- <paramdef>XLCd<parameter> to_lcd</parameter></paramdef>
- <paramdef>char<parameter> *to_type</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-<function>_XlcOpenConverter </function>
-function opens the converter which converts a text from specified
-"<emphasis remap='I'>from_type</emphasis>" to specified "<emphasis remap='I'>to_type</emphasis>" encoding. If the
-function cannot find proper converter or cannot open a corresponding
-converter, it returns NULL. Otherwise, it returns the conversion
-descriptor.
-</para>
-
-<para>
-The following types are pre-defined. Other types are implementation
-dependent.
-</para>
-
-<informaltable>
- <tgroup cols='4' align='left'>
- <colspec colname='c1' colwidth="3*" colsep="0"/>
- <colspec colname='c2' colwidth="1*" colsep="0"/>
- <colspec colname='c3' colwidth="3*" colsep="0"/>
- <colspec colname='c4' colwidth="2*" colsep="0"/>
- <thead>
- <row>
- <entry>Name</entry>
- <entry>Type</entry>
- <entry>Description</entry>
- <entry>Arguments</entry>
- </row>
- </thead>
- <tbody>
- <row rowsep="0">
- <entry>XlcNMultiByte</entry>
- <entry>char *</entry>
- <entry>multibyte</entry>
- <entry>-</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNWideChar</entry>
- <entry>wchar_t *</entry>
- <entry>wide character</entry>
- <entry>-</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNCompoundText</entry>
- <entry>char *</entry>
- <entry>COMPOUND_TEXT</entry>
- <entry>-</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNString</entry>
- <entry>char *</entry>
- <entry>STRING</entry>
- <entry>-</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNCharSet</entry>
- <entry>char *</entry>
- <entry>per charset</entry>
- <entry>XlcCharSet</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNChar</entry>
- <entry>char *</entry>
- <entry>per character</entry>
- <entry>XlcCharSet</entry>
- </row>
- </tbody>
- </tgroup>
-</informaltable>
-
-<para>
-<emphasis role="bold">Close a converter</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcCloseConverter</function></funcdef>
- <paramdef>XlcConv<parameter> conv</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcCloseConverter</function>
-function closes the specified converter "<emphasis remap='I'>conv</emphasis>".
-</para>
-
-<para>
-<emphasis role="bold">Code conversion</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _XlcConvert</function></funcdef>
- <paramdef>XlcConv<parameter> conv</parameter></paramdef>
- <paramdef>XPointer<parameter> *from</parameter></paramdef>
- <paramdef>int<parameter> *from_left</parameter></paramdef>
- <paramdef>XPointer<parameter> *to</parameter></paramdef>
- <paramdef>int<parameter> *to_left</parameter></paramdef>
- <paramdef>XPointer<parameter> *args</parameter></paramdef>
- <paramdef>int<parameter> num_args</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcConvert</function>
-function converts a sequence of characters from one type, in the array
-specified by "<emphasis remap='I'>from</emphasis>", into a sequence of corresponding characters
-in another type, in the array specified by "<emphasis remap='I'>to</emphasis>". The types are
-those specified in the
-<function>_XlcOpenConverter() </function>
-call that returned the conversion descriptor, "<emphasis remap='I'>conv</emphasis>".
-The arguments "<emphasis remap='I'>from</emphasis>", "<emphasis remap='I'>from_left</emphasis>", "<emphasis remap='I'>to</emphasis>" and
-"<emphasis remap='I'>to_left</emphasis>" have the same specification of XPG4 iconv function.
-</para>
-
-<para>
-For state-dependent encodings, the conversion descriptor "<emphasis remap='I'>conv</emphasis>"
-is placed into its initial shift state by a call for which "<emphasis remap='I'>from</emphasis>"
-is a NULL pointer, or for which "<emphasis remap='I'>from</emphasis>" points to a null pointer.
-</para>
-
-<para>
-The following 2 converters prepared by locale returns appropriate
-charset (XlcCharSet) in an area pointed by args[0].
-</para>
-
-<informaltable frame="none">
- <tgroup cols='3' align='left'>
- <colspec colname='c1' colwidth="1*" colsep="0"/>
- <colspec colname='c2' colwidth="1*" colsep="0"/>
- <colspec colname='c3' colwidth="2*" colsep="0"/>
- <thead>
- <row>
- <entry>From</entry>
- <entry>To</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row rowsep="0">
- <entry>XlcNMultiByte</entry>
- <entry>XlcNCharSet</entry>
- <entry>Segmentation (Decomposing)</entry>
- </row>
- <row rowsep="0">
- <entry>XlcNWideChar</entry>
- <entry>XlcNCharSet</entry>
- <entry>Segmentation (Decomposing)</entry>
- </row>
- </tbody>
- </tgroup>
-</informaltable>
-
-<para>
-The conversion, from XlcNMultiByte/XlcNWideChar to XlcNCharSet,
-extracts a segment which has same charset encoding characters.
-More than one segment cannot be converted in a call.
-</para>
-
-<para>
-<emphasis role="bold">Reset a converter</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcResetConverter</function></funcdef>
- <paramdef>XlcConv<parameter> conv</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcResetConverter </function>
-function reset the specified converter "<emphasis remap='I'>conv</emphasis>".
-</para>
-
-<para>
-<emphasis role="bold">Register a converter</emphasis>
-</para>
-
-<literallayout class="monospaced">
-typedef XlcConv (*XlcOpenConverterProc)(<emphasis remap='I'>from_lcd</emphasis>, <emphasis remap='I'>from_type</emphasis>, <emphasis remap='I'>to_lcd</emphasis>, <emphasis remap='I'>to_type</emphasis>);
- XLCd <emphasis remap='I'>from_lcd</emphasis>;
- char <emphasis remap='I'>*from_type</emphasis>;
- XLCd <emphasis remap='I'>to_lcd</emphasis>;
- char <emphasis remap='I'>*to_type</emphasis>;
-</literallayout>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>Bool <function> _XlcSetConverter</function></funcdef>
- <paramdef>XLCd<parameter> from_lcd</parameter></paramdef>
- <paramdef>char<parameter> *from</parameter></paramdef>
- <paramdef>XLCd<parameter> to_lcd</parameter></paramdef>
- <paramdef>char<parameter> *to</parameter></paramdef>
- <paramdef>XlcOpenConverterProc<parameter> converter</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The <function>XlcSetConverter</function> function registers a converter which convert
-from "<emphasis remap='I'>from_type</emphasis>" to "<emphasis remap='I'>to_type</emphasis>" into the converter list
-(in the specified XLCd).
-</para>
-</sect1>
-
-<sect1 id="X_Locale_Database_functions">
-<title>X Locale Database functions</title>
-<para>
-X Locale Database contains the subset of user's environment that
-depends on language. The following APIs are provided for accessing
-X Locale Database and other locale relative files.
-</para>
-
-<para>
-For more detail about X Locale Database, please refer
-X Locale Database Definition document.
-</para>
-
-<para>
-<emphasis role="bold">Get a resource from database</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcGetResource</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
- <paramdef>char<parameter> *category</parameter></paramdef>
- <paramdef>char<parameter> *class</parameter></paramdef>
- <paramdef>char<parameter> ***value</parameter></paramdef>
- <paramdef>int<parameter> *count</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcGetResource</function>
-function obtains a locale dependent data which is associated with the
-locale of specified "<emphasis remap='I'>lcd</emphasis>".
-The locale data is provided by system locale or by X Locale Database
-file, and what kind of data is available is implementation dependent.
-</para>
-
-<para>
-The specified "<emphasis remap='I'>category</emphasis>" and "<emphasis remap='I'>class</emphasis>" are used for
-finding out the objective locale data.
-</para>
-
-<para>
-The returned value is returned in value argument in string list form,
-and the returned count shows the number of strings in the value.
-</para>
-
-<para>
-The returned value is owned by locale method, and should not be modified
-or freed by caller.
-</para>
-
-<para>
-<emphasis role="bold">Get a locale relative file name</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>char *<function>_XlcFileName</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
- <paramdef>char<parameter> *category</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcFileName</function>
-functions returns a file name which is bound to the specified "<emphasis remap='I'>lcd</emphasis>"
-and "<emphasis remap='I'>category</emphasis>", as a null-terminated string. If no file name can
-be found, or there is no readable file for the found file name,
-<function>_XlcFileName</function>
-returns NULL. The returned file name should be freed by caller.
-</para>
-
-<para>
-The rule for searching a file name is implementation dependent.
-In current implementation,
-<function>_XlcFileName </function>
-uses "{category}.dir" file as mapping table, which has pairs of
-strings, a full locale name and a corresponding file name.
-</para>
-
-</sect1>
-
-<sect1 id="Utility_Functions">
-<title>Utility Functions</title>
-
-<para>
-<emphasis role="bold">Compare Latin-1 strings</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _XlcCompareISOLatin1</function></funcdef>
- <paramdef>char*str1,<parameter> *str2</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _XlcNCompareISOLatin1</function></funcdef>
- <paramdef>char*str1,<parameter> *str2</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_XlcCompareIsoLatin1 </function>
-function to compares two ISO-8859-1 strings. Bytes representing ASCII lower
-case letters are converted to upper case before making the comparison.
-The value returned is an integer less than, equal to, or greater than
-zero, depending on whether "<emphasis remap='I'>str1</emphasis>" is lexicographicly less than,
-equal to, or greater than "<emphasis remap='I'>str2</emphasis>".
-</para>
-
-<para>
-The
-<function>_XlcNCompareIsoLatin1</function>
-function is identical to
-<function>_XlcCompareISOLatin1,</function>
-except that at most "<emphasis remap='I'>len</emphasis>" bytes are compared.
-</para>
-
-<para>
-<emphasis role="bold">Resource Utility</emphasis>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> XlcNumber</function></funcdef>
- <paramdef>ArrayType<parameter> array</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to XtNumber.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcCopyFromArg</function></funcdef>
- <paramdef>char<parameter> *src</parameter></paramdef>
- <paramdef>char<parameter> *dst</parameter></paramdef>
- <paramdef>int<parameter> size</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcCopyToArg</function></funcdef>
- <paramdef>char<parameter> *src</parameter></paramdef>
- <paramdef>char<parameter> **dst</parameter></paramdef>
- <paramdef>int<parameter> size</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to
-<function>_XtCopyFromArg </function>
-and
-<function>_XtCopyToArg.</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcCountVaList</function></funcdef>
- <paramdef>va_list<parameter> var</parameter></paramdef>
- <paramdef>int<parameter> *count_ret</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to
-<function>_XtCountVaList.</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcVaToArgList</function></funcdef>
- <paramdef>va_list<parameter> var</parameter></paramdef>
- <paramdef>int<parameter> count</parameter></paramdef>
- <paramdef>XlcArgList<parameter> *args_ret</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to
-<function>_XtVaToArgList.</function>
-</para>
-
-<literallayout class="monospaced">
-typedef struct _XlcResource {
- char *name;
- XrmQuark xrm_name;
- int size;
- int offset;
- unsigned long mask;
-} XlcResource, *XlcResourceList;
-</literallayout>
-
-<literallayout class="monospaced">
-#define XlcCreateMask (1L&lt;&lt;0)
-#define XlcDefaultMask (1L&lt;&lt;1)
-#define XlcGetMask (1L&lt;&lt;2)
-#define XlcSetMask (1L&lt;&lt;3)
-#define XlcIgnoreMask (1L&lt;&lt;4)
-</literallayout>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>void <function> _XlcCompileResourceList</function></funcdef>
- <paramdef>XlcResourceList<parameter> resources</parameter></paramdef>
- <paramdef>int<parameter> num_resources</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to
-<function>_XtCompileResourceList.</function>
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>char * <function> _XlcGetValues</function></funcdef>
- <paramdef>XPointer<parameter> base</parameter></paramdef>
- <paramdef>XlcResourceList<parameter> resources</parameter></paramdef>
- <paramdef>int<parameter> num_resources</parameter></paramdef>
- <paramdef>XlcArgList<parameter> args</parameter></paramdef>
- <paramdef>int<parameter> num_args</parameter></paramdef>
- <paramdef>unsignedlong<parameter> mask</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to XtGetSubvalues.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>char * <function> _XlcSetValues</function></funcdef>
- <paramdef>XPointer<parameter> base</parameter></paramdef>
- <paramdef>XlcResourceList<parameter> resources</parameter></paramdef>
- <paramdef>int<parameter> num_resources</parameter></paramdef>
- <paramdef>XlcArgList<parameter> args</parameter></paramdef>
- <paramdef>int<parameter> num_args</parameter></paramdef>
- <paramdef>unsignedlong<parameter> mask</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-Similar to XtSetSubvalues.
-</para>
-
-<para>
-<emphasis role="bold">ANSI C Compatible Functions</emphasis>
-</para>
-
-<para>
-The following are ANSI C/MSE Compatible Functions for non-ANSI C environment.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xmblen</function></funcdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xmblen </function>
-function returns the number of characters pointed to by "<emphasis remap='I'>str</emphasis>".
-Only "<emphasis remap='I'>len</emphasis>" bytes in "<emphasis remap='I'>str</emphasis>" are used in determining the
-character count returned. "<emphasis remap='I'>Str</emphasis>" may point at characters from
-any valid codeset in the current locale.
-</para>
-
-<para>
-The call
-<function>_Xmblen</function>
-is equivalent to
-_Xmbtowc(_Xmbtowc((<emphasis remap='I'>wchar_t*</emphasis>)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>))
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xmbtowc</function></funcdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xmbtowc</function>
-function converts the character(s) pointed to by "<emphasis remap='I'>str</emphasis>"
-to their wide character representation(s) pointed to by "<emphasis remap='I'>wstr</emphasis>".
-"<emphasis remap='I'>Len</emphasis>" is the number of bytes in "<emphasis remap='I'>str</emphasis>" to be converted.
-The return value is the number of characters converted.
-</para>
-
-<para>
-The call
-<function>_Xmbtowc</function>
-is equivalent to
-_Xlcmbtowc((XLCd)NULL, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>)
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xlcmbtowc</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xlcmbtowc</function>
-function is identical to
-<function>_Xmbtowc, </function>
-except that it requires the "<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>"
-is (XLCd) NULL,
-<function>_Xlcmbtowc, </function>
-calls
-<function>_XlcCurrentLC </function>
-to determine the current locale.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xwctomb</function></funcdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>wchar_t<parameter> wc</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xwctomb </function>
-function converts a single wide character pointed to by "<emphasis remap='I'>wc</emphasis>" to
-its multibyte representation pointed to by "<emphasis remap='I'>str</emphasis>".
-On success, the return value is 1.
-</para>
-
-<para>
-The call
-<function>_Xwctomb</function>
-is equivalent to
-_Xlcwctomb((XLCd)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>wstr</emphasis>)
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xlcwctomb</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>wchar_t<parameter> wc</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xlcwctomb</function>
-function is identical to _Xwctomb, except that it requires the
-"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL,
-<function>_Xlcwctomb, </function>
-calls
-<function>_XlcCurrentLC </function>
-to determine the current locale.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xmbstowcs</function></funcdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xmbstowcs</function>
-function converts the NULL-terminated string pointed to by "<emphasis remap='I'>str</emphasis>"
-to its wide character string representation pointed to by "<emphasis remap='I'>wstr</emphasis>".
-"<emphasis remap='I'>Len</emphasis>" is the number of characters in "<emphasis remap='I'>str</emphasis>" to be converted.
-</para>
-
-<para>
-The call
-<function>_Xmbstowcs</function>
-is equivalent to
-_Xlcmbstowcs((XLCd)NULL, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>)
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xlcmbstowcs</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xlcmbstowcs </function>
-function is identical to _Xmbstowcs, except that it requires the
-"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL,
-<function>_Xlcmbstowcs, </function>
-calls
-<function>_XlcCurrentLC</function>
-to determine the current locale.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xwcstombs</function></funcdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xwcstombs </function>
-function converts the (wchar_t) NULL terminated wide character string
-pointed to by "<emphasis remap='I'>wstr</emphasis>" to the NULL terminated multibyte string
-pointed to by "<emphasis remap='I'>str</emphasis>".
-</para>
-
-<para>
-The call
-<function>_Xwcstombs </function>
-is equivalent to
-_Xlcwcstombs((XLCd)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>len</emphasis>)
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xlcwcstombs</function></funcdef>
- <paramdef>XLCd<parameter> lcd</parameter></paramdef>
- <paramdef>char<parameter> *str</parameter></paramdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xlcwcstombs </function>
-function is identical to _Xwcstombs, except that it requires the
-"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL,
-<function>_Xlcwcstombs, </function>
-calls
-<function>_XlcCurrentLC </function>
-to determine the current locale.
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xwcslen</function></funcdef>
- <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xwcslen </function>
-function returns the count of wide characters in the (wchar_t) NULL
-terminated wide character string pointed to by "<emphasis remap='I'>wstr</emphasis>".
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>wchar_t *<function> _Xwcscpy</function></funcdef>
- <paramdef>wchar_t<parameter> *wstr1</parameter></paramdef>
- <paramdef>wchar_t<parameter> *wstr2</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>wchar_t * <function> _Xwcsncpy</function></funcdef>
- <paramdef>wchar_t<parameter> *wstr1</parameter></paramdef>
- <paramdef>wchar_t<parameter> *wstr2</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xwcscpy </function>
-function copies the (wchar_t) NULL terminated wide character string
-pointed to by "<emphasis remap='I'>wstr2</emphasis>" to the object pointed at by "<emphasis remap='I'>wstr1</emphasis>".
-"<emphasis remap='I'>Wstr1</emphasis>" is (wchar_t) NULL terminated. The return value is a
-pointer to "<emphasis remap='I'>wstr1</emphasis>".
-</para>
-
-<para>
-The
-<function>_Xwcsncpy</function>
-function is identical to
-<function>_Xwcscpy, </function>
-except that it copies "<emphasis remap='I'>len</emphasis>" wide characters from the object
-pointed to by "<emphasis remap='I'>wstr2</emphasis>" to the object pointed to "<emphasis remap='I'>wstr1</emphasis>".
-</para>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xwcscmp</function></funcdef>
- <paramdef>wchar_t*wstr1,<parameter> *wstr2</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<funcsynopsis>
-<funcprototype>
- <funcdef>int <function> _Xwcsncmp</function></funcdef>
- <paramdef>wchar_t*wstr1,<parameter> *wstr2</parameter></paramdef>
- <paramdef>int<parameter> len</parameter></paramdef>
-</funcprototype>
-</funcsynopsis>
-
-<para>
-The
-<function>_Xwcscmp </function>
-function compares two (wchar_t) NULL terminated wide character strings.
-The value returned is an integer less than, equal to, or greater than zero,
-depending on whether "<emphasis remap='I'>wstr1</emphasis>" is lexicographicly less then, equal to,
-or greater than "<emphasis remap='I'>str2</emphasis>".
-</para>
-
-<para>
-The
-<function>_Xwcsncmp </function>
-function is identical to
-<function>_XlcCompareISOLatin1, </function>
-except that at most "<emphasis remap='I'>len</emphasis>" wide characters are compared.
-</para>
-
-
-<!-- .sp -->
-<!-- .\" .LP -->
-<!-- .\" <function>Locale Method Internal Functions</function> -->
-<!-- .\" .LP -->
-<!-- .\" .FD 0 -->
-<!-- .\" XlcCharSet _XlcCreateDefaultCharSet(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>ct_sequence</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*name</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*ct_sequence</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .FD 0 -->
-<!-- .\" Bool _XlcParseCharSet(<emphasis remap='I'>charset</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" XlcCharSet <emphasis remap='I'>charset</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .FD 0 -->
-<!-- .\" void _XlcGetLocaleDataBase(<emphasis remap='I'>lcd</emphasis>, <emphasis remap='I'>category</emphasis>, <emphasis remap='I'>name</emphasis>, <emphasis remap='I'>value</emphasis>, <emphasis remap='I'>count</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*category</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*name</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>***value</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" int <emphasis remap='I'>*count</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .FD 0 -->
-<!-- .\" void _XlcDestroyLocaleDataBase(<emphasis remap='I'>lcd</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .FD 0 -->
-<!-- .\" XPointer _XlcCreateLocaleDataBase(<emphasis remap='I'>lcd</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .LP -->
-<!-- .\" .sp -->
-<!-- .\" <function>Obtain an locale database path</function> -->
-<!-- .\" .LP -->
-<!-- .\" .FD 0 -->
-<!-- .\" int _XlcResolveI18NPath(<emphasis remap='I'>dir</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*dir</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .LP -->
-<!-- .\" The -->
-<!-- .\" .PN _XlcResolveI18NPath -->
-<!-- .\" function returns path name list that is related to X Locale Database. -->
-<!-- .\" The obtained path is stored into the array which is pointed by -->
-<!-- .\" specified "<emphasis remap='I'>dir</emphasis>". The path consists of directory paths which -->
-<!-- .\" are separated with colon. -->
-<!-- .\" If the environment variable XLOCALEDIR is specified, the path -->
-<!-- .\" contains its contents. -->
-<!-- .\" .LP -->
-<!-- .\" The default path of X Locale Database is implementation dependent. -->
-<!-- .\" In current implementation, it's determined in build time. -->
-<!-- .\" .LP -->
-<!-- .\" .PN _XlcResolveI18NPath -->
-<!-- .\" does not check overflow of the array to which the "<emphasis remap='I'>dir</emphasis>" -->
-<!-- .\" parameter points. Caller should provide enough buffer to store this -->
-<!-- .\" string. -->
-<!-- .\" .LP -->
-<!-- .\" .sp -->
-<!-- .\" <function>Obtain a full locale name</function> -->
-<!-- .\" .LP -->
-<!-- .\" .FD 0 -->
-<!-- .\" int _XlcResolveLocaleName(<emphasis remap='I'>lc_name</emphasis>, <emphasis remap='I'>full_name</emphasis>, <emphasis remap='I'>language</emphasis>, <emphasis remap='I'>territory</emphasis>, <emphasis remap='I'>codeset</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*lc_name</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*full_name</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*language</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*territory</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*codeset</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .LP -->
-<!-- .\" The -->
-<!-- .\" .PN _XlcResolveLocaleName -->
-<!-- .\" function returns a full locale name. -->
-<!-- .\" The obtained full locale name is stored into the array which is -->
-<!-- .\" pointed by specified "<emphasis remap='I'>full_name</emphasis>". -->
-<!-- .\" The language, territory and codeset part of the full locale name -->
-<!-- .\" are copied to the return arguments, "<emphasis remap='I'>language</emphasis>", -->
-<!-- .\" "<emphasis remap='I'>territory</emphasis>" and "<emphasis remap='I'>codeset</emphasis>", respectively. -->
-<!-- .\" NULL can be specified for these arguments. -->
-<!-- .\" .LP -->
-<!-- .\" The rule for mapping from locale name to full locale name is -->
-<!-- .\" implementation dependent. -->
-<!-- .\" .LP -->
-<!-- .\" .PN _XlcResolveLocaleName -->
-<!-- .\" does not check overflow of the array to which -->
-<!-- .\" "<emphasis remap='I'>full_name</emphasis>", "<emphasis remap='I'>language</emphasis>", "<emphasis remap='I'>territory</emphasis>" and -->
-<!-- .\" "<emphasis remap='I'>codeset</emphasis>" parameter point. -->
-<!-- .\" Caller should provide enough buffer to store those string. -->
-<!-- .\" .LP -->
-<!-- .\" In current implementation, -->
-<!-- .\" .PN _XlcResolveLocaleName -->
-<!-- .\" uses locale.alias file as mapping table, which has pairs of strings, -->
-<!-- .\" a locale name and a full locale name. -->
-<!-- .\" .LP -->
-<!-- .\" .FD 0 -->
-<!-- .\" int _XlcResolveDBName(<emphasis remap='I'>lc_name</emphasis>, <emphasis remap='I'>file_name</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*lc_name</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*file_name</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .FD 0 -->
-<!-- .\" XLCd _XlcCreateLC(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>methods</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" char <emphasis remap='I'>*name</emphasis>; -->
-<!-- .\" .br -->
-<!-- .\" XLCdMethods <emphasis remap='I'>methods</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .FD 0 -->
-<!-- .\" void _XlcDestroyLC(<emphasis remap='I'>lcd</emphasis>) -->
-<!-- .\" .br -->
-<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
-<!-- .\" .FN -->
-<!-- .\" .LP -->
-<!-- .\" -->
-
-</sect1>
-</chapter>
-</book>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<book id="framework">
+
+<bookinfo>
+ <title>X11R6 Sample Implementation Frame Work</title>
+ <releaseinfo>X Version 11, Release 7</releaseinfo>
+ <authorgroup>
+ <othercredit>
+ <firstname>Katsuhisa</firstname><surname>Yano</surname>
+ <affiliation><orgname>TOSHIBA Corporation</orgname></affiliation>
+ </othercredit>
+ <othercredit>
+ <firstname>Yoshio</firstname><surname>Horiuchi</surname>
+ <affiliation><orgname>IBM Japan</orgname></affiliation>
+ </othercredit>
+ </authorgroup>
+ <copyright><year>1994</year><holder>TOSHIBA Corporation</holder></copyright>
+ <copyright><year>1994</year><holder>IBM Corporation</holder></copyright>
+
+<legalnotice>
+
+<para>
+Permission to use, copy, modify, and distribute this documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice and this permission notice appear in all copies. TOSHIBA Corporation and
+IBM Corporation make no representations about the suitability for any purpose of the information in this document.
+This documentation is provided as is without express or implied warranty.
+</para>
+
+<para>
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the following
+conditions:
+</para>
+
+<para>
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+</para>
+
+<para>
+THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</para>
+
+<para>
+Except as contained in this notice, the name of The Open Group shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from X Consortium.
+</para>
+
+<para>X Window System is a trademark of The Open Group.</para>
+
+</legalnotice>
+</bookinfo>
+
+<chapter id="framework_">
+<title>Framework</title>
+<sect1 id="preface">
+<title>Preface</title>
+<para>
+This document proposes to define the structures, methods and their
+signatures that are expected to be common to all locale dependent
+functions within the Xlib sample implementation. The following
+illustration (Fig.1) <!-- xref --> is proposed to outline the separating of
+the components within the sample implementation.
+</para>
+
+<para>
+Preface drawing.
+</para>
+
+<mediaobject id="framework_locale_service_api_proposal">
+ <imageobject>
+ <imagedata width="540px" depth="530px" contentwidth="560px" contentdepth="550px" format="SVG" fileref="framework.svg"/>
+ </imageobject>
+ <caption>Frame work of Locale Service API Proposal</caption>
+</mediaobject>
+
+<para>
+Generally speaking, the internationalized portion of Xlib (Locale
+Dependent X, LDX) consists of three objects;
+locale (LC) , input method (IM) and output method (OM).
+The LC provides a set of information that depends on user's language
+environment. The IM manages text inputing, and the OM manages text
+drawing. Both IM and OM highly depend on LC data.
+</para>
+
+<para>
+In X11R5, there are two sample implementations, Ximp and Xsi, for
+Xlib internationalization. But in both implementations, IM and OM
+actually refer the private extension of LC. It breaks coexistence
+of these two sample implementations. For example, if a user creates
+a new OM for special purpose as a part of Ximp, it will not work with
+Xsi.
+</para>
+
+<para>
+As a solution of this problem, we propose to define the standard
+APIs between these three objects, and define the structure that are
+common to these objects.
+</para>
+</sect1>
+
+<sect1 id="Objective">
+<title>Objective</title>
+
+<itemizedlist>
+ <listitem>
+ <para>
+Explain the current X11R6 sample implementation
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Document the common set of locale dependent interfaces
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Provide more flexible pluggable layer
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+
+<sect1 id="Locale_Object_Binding_Functions">
+<title>Locale Object Binding Functions</title>
+<!-- .XS (SN Locale Object Binding Functions -->
+<!-- .XE -->
+<para>
+This chapter describes functions related locale object binding for
+implementing the pluggable layer.
+</para>
+
+<para>
+A locale loader is an entry point for locale object, which
+instantiates XLCd object and binds locale methods with specified
+locale name. The behavior of loader is implementation dependent.
+And, what kind of loaders are available is also implementation
+dependent.
+</para>
+
+<para>
+<!-- .LP -->
+The loader is called in
+<function>_XOpenLC, </function>
+but caller of
+<function>_XOpenLC </function>
+does not need to care about its inside. For example, if the loader is
+implemented with dynamic load functions, and the dynamic module is
+expected to be unloaded when the corresponding XLCd is freed,
+close methods of XLCdMethods should handle unloading.
+</para>
+
+<para>
+<emphasis role="bold">Initializing a locale loader list</emphasis>
+</para>
+
+<para>void _XlcInitLoader</para>
+
+
+<para>
+The
+<function>_XlcInitLoader</function>
+function initializes the locale loader list with vendor specific
+manner. Each loader is registered with calling
+<function>_XlcAddLoader.</function>
+The number of loaders and their order in the loader list is
+implementation dependent.
+</para>
+
+<para>
+<emphasis role="bold">Add a loader</emphasis>
+</para>
+
+<literallayout>
+typedef XLCd (*XLCdLoadProc)(<emphasis remap='I'>name</emphasis>);
+ char <emphasis remap='I'>*name</emphasis>;
+
+typedef int XlcPosition;
+
+#define XlcHead
+#define XlcTail
+</literallayout>
+
+<funcsynopsis id='_xlcaddloader'>
+<funcprototype>
+ <funcdef>Bool <function> _XlcAddLoader</function></funcdef>
+ <paramdef>XLCdLoadProc<parameter> proc</parameter></paramdef>
+ <paramdef>XlcPosition<parameter> position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcAddLoader</function>
+function registers the specified locale loader "<emphasis remap='I'>proc</emphasis>" to the
+internal loader list. The position specifies that the loader
+"<emphasis remap='I'>proc</emphasis>" should be placed in the top of the loader list(XlcHead)
+or last(XlcTail).
+</para>
+
+<para>
+The object loader is called from the top of the loader list in order,
+when calling time.
+</para>
+
+<para>
+<function>Remove a loader</function>
+</para>
+
+<funcsynopsis id='_xlcremoveloader'>
+<funcprototype>
+ <funcdef>void <function> _XlcRemoveLoader</function></funcdef>
+ <paramdef>XLCdLoadProc<parameter> proc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcRemoveLoader</function>
+function removes the locale loader specified by "<emphasis remap='I'>proc</emphasis>" from the
+loader list.
+</para>
+
+<para>
+Current implementation provides following locale loaders;
+</para>
+
+<literallayout>
+<function>_XlcDefaultLoader</function>
+<function>_XlcGenericLoader</function>
+<function>_XlcEucLoader</function>
+<function>_XlcSjisLoader</function>
+<function>_XlcUtfLoader</function>
+<function>_XaixOsDynamicLoad</function>
+</literallayout>
+
+</sect1>
+
+<sect1 id="Locale_Method_Interface">
+<title>Locale Method Interface</title>
+
+<para>
+This chapter describes the locale method API, which is a set of
+accessible functions from both IM and OM parts.
+The locale method API provides the functionalities; obtaining locale
+dependent information, handling charset, converting text, etc.
+</para>
+
+<para>
+As a result of using these APIs instead of accessing vender private
+extension of the locale object, we can keep locale, IM and OM
+independently each other.
+</para>
+
+</sect1>
+
+<sect1 id="Locale_Method_Functions">
+<title>Locale Method Functions</title>
+<para>
+<function>Open a Locale Method</function>
+</para>
+
+<funcsynopsis id='_xopenlc'>
+<funcprototype>
+ <funcdef>XLCd <function> _XOpenLC</function></funcdef>
+ <paramdef>char<parameter> *name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XOpenLC</function>
+function opens a locale method which corresponds to the
+specified locale name.
+<function>_XOpenLC</function>
+calls a locale object loader, which is registered via
+<function>_XlcAddLoader into the internal loader list. If the called loader </function>
+is valid and successfully opens a locale,
+<function>_XOpenLC</function>
+returns the XLCd. If the loader is invalid or failed to open a locale,
+<function>_XOpenLC</function>
+calls the next loader. If all registered loaders cannot open a locale,
+<function>_XOpenLC</function>
+returns NULL.
+</para>
+
+<para>XLCd _XlcCurrentLC</para>
+
+<para>
+The
+<function>_XlcCurrentLC</function>
+function returns an XLCd that are bound to current locale.
+</para>
+
+<para>
+<emphasis role="bold">Close a Locale Method</emphasis>
+</para>
+
+<funcsynopsis id='_xcloselc'>
+<funcprototype>
+ <funcdef>void <function> _XCloseLC</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<!-- .LP -->
+The
+<function>_XCloseLC</function>
+function close a locale method the specified lcd.
+</para>
+
+<para>
+<emphasis role="bold">Obtain Locale Method values</emphasis>
+</para>
+
+<funcsynopsis id='_xgetlcvalues'>
+<funcprototype>
+ <funcdef>char *<function>_XGetLCValues</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XGetLCValues</function>
+function returns NULL if no error occurred; otherwise, it returns the
+name of the first argument that could not be obtained.
+The following values are defined as standard arguments. Other values
+are implementation dependent.
+</para>
+
+<informaltable frame="none">
+ <tgroup cols='3' align='left'>
+ <colspec colname='c1' colwidth="3*" colsep="0"/>
+ <colspec colname='c2' colwidth="1*" colsep="0"/>
+ <colspec colname='c3' colwidth="3*" colsep="0"/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>XlcNCodeset</entry>
+ <entry>char*</entry>
+ <entry>codeset part of locale name</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNDefaultString</entry>
+ <entry>char*</entry>
+ <entry>XDefaultString()</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNEncodingName</entry>
+ <entry>char*</entry>
+ <entry>encoding name</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNLanguage</entry>
+ <entry>char*</entry>
+ <entry>language part of locale name</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNMbCurMax</entry>
+ <entry>int</entry>
+ <entry>ANSI C MB_CUR_MAX</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNStateDependentEncoding</entry>
+ <entry>Bool</entry>
+ <entry>is state-dependent encoding or not</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNTerritory</entry>
+ <entry>char*</entry>
+ <entry>territory part of locale name</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect1>
+
+<sect1 id="Charset_functions">
+<title>Charset functions</title>
+<para>
+The XlcCharSet is an identifier which represents a subset of characters
+(character set) in the locale object.
+</para>
+
+<literallayout class="monospaced">
+typedef enum {
+ XlcUnknown, XlcC0, XlcGL, XlcC1, XlcGR, XlcGLGR, XlcOther
+} XlcSide;
+
+typedef struct _XlcCharSetRec *XlcCharSet;
+
+typedef struct {
+ char *name;
+ XPointer value;
+} XlcArg, *XlcArgList;
+
+typedef char* (*XlcGetCSValuesProc)(<emphasis remap='I'>charset</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>);
+ XlcCharSet <emphasis remap='I'>charset</emphasis>;
+ XlcArgList <emphasis remap='I'>args</emphasis>;
+ int <emphasis remap='I'>num_args</emphasis>;
+
+typedef struct _XlcCharSetRec {
+ char *name;
+ XrmQuark xrm_name;
+ char *encoding_name;
+ XrmQuark xrm_encoding_name;
+ XlcSide side;
+ int char_size;
+ int set_size;
+ char *ct_sequence;
+ XlcGetCSValuesProc get_values;
+} XlcCharSetRec;
+</literallayout>
+
+<para>
+<emphasis role="bold">Get an XlcCharSet</emphasis>
+</para>
+
+<funcsynopsis id='_xlcgetcharset'>
+<funcprototype>
+ <funcdef>XlcCharSet <function> _XlcGetCharSet</function></funcdef>
+ <paramdef>char<parameter> *name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcGetCharSet</function>
+function gets an XlcCharSet which corresponds to the charset name
+specified by "<emphasis remap='I'>name</emphasis>".
+<function>_XlcGetCharSet </function>
+returns NULL, if no XlcCharSet bound to specified "<emphasis remap='I'>name</emphasis>".
+</para>
+
+<para>
+The following character sets are pre-registered.
+</para>
+
+<informaltable frame="none">
+ <tgroup cols='2' align='left'>
+ <colspec colname='c1' colwidth="1*" colsep="0"/>
+ <colspec colname='c2' colwidth="2*" colsep="0"/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>ISO8859-1:GL</entry>
+ <entry>7-bit ASCII graphics (ANSI X3.4-1968),</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>Left half of ISO 8859 sets</entry>
+ </row>
+ <row rowsep="0">
+ <entry>JISX0201.1976-0:GL</entry>
+ <entry>Left half of JIS X0201-1976 (reaffirmed 1984),</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>8-Bit Alphanumeric-Katakana Code</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-1:GR</entry>
+ <entry>Right half of ISO 8859-1, Latin alphabet No. 1</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-2:GR</entry>
+ <entry>Right half of ISO 8859-2, Latin alphabet No. 2</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-3:GR</entry>
+ <entry>Right half of ISO 8859-3, Latin alphabet No. 3</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-4:GR</entry>
+ <entry>Right half of ISO 8859-4, Latin alphabet No. 4</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-7:GR</entry>
+ <entry>Right half of ISO 8859-7, Latin/Greek alphabet</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-6:GR</entry>
+ <entry>Right half of ISO 8859-6, Latin/Arabic alphabet</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-8:GR</entry>
+ <entry>Right half of ISO 8859-8, Latin/Hebrew alphabet</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-5:GR</entry>
+ <entry>Right half of ISO 8859-5, Latin/Cyrillic alphabet</entry>
+ </row>
+ <row rowsep="0">
+ <entry>ISO8859-9:GR</entry>
+ <entry>Right half of ISO 8859-9, Latin alphabet No. 5</entry>
+ </row>
+ <row rowsep="0">
+ <entry>JISX0201.1976-0:GR</entry>
+ <entry>Right half of JIS X0201-1976 (reaffirmed 1984),</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>8-Bit Alphanumeric-Katakana Code</entry>
+ </row>
+ <row rowsep="0">
+ <entry>GB2312.1980-0:GL</entry>
+ <entry>GB2312-1980, China (PRC) Hanzi defined as GL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>GB2312.1980-0:GR</entry>
+ <entry>GB2312-1980, China (PRC) Hanzi defined as GR</entry>
+ </row>
+ <row rowsep="0">
+ <entry>JISX0208.1983-0:GL</entry>
+ <entry>JIS X0208-1983, Japanese Graphic Character Set</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>defined as GL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>JISX0208.1983-0:GR</entry>
+ <entry>JIS X0208-1983, Japanese Graphic Character Set</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>defined as GR</entry>
+ </row>
+ <row rowsep="0">
+ <entry>KSC5601.1987-0:GL</entry>
+ <entry>KS C5601-1987, Korean Graphic Character Set</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>defined as GL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>KSC5601.1987-0:GR</entry>
+ <entry>KS C5601-1987, Korean Graphic Character Set</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>defined as GR</entry>
+ </row>
+ <row rowsep="0">
+ <entry>JISX0212.1990-0:GL</entry>
+ <entry>JIS X0212-1990, Japanese Graphic Character Set</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>defined as GL</entry>
+ </row>
+ <row rowsep="0">
+ <entry>JISX0212.1990-0:GR</entry>
+ <entry>JIS X0212-1990, Japanese Graphic Character Set</entry>
+ </row>
+ <row rowsep="0">
+ <entry></entry>
+ <entry>defined as GR</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+<emphasis role="bold">Add an XlcCharSet</emphasis>
+</para>
+
+<funcsynopsis id='_xlcaddcharset'>
+<funcprototype>
+ <funcdef>Bool <function> _XlcAddCharSet</function></funcdef>
+ <paramdef>XlcCharSet<parameter> charset</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcAddCharSet</function>
+function registers XlcCharSet specified by "<emphasis remap='I'>charset</emphasis>".
+</para>
+
+<para>
+<!-- .LP -->
+<!-- .sp -->
+<function>Obtain Character Set values</function>
+</para>
+
+<funcsynopsis id='_xlcgetcsvalues'>
+<funcprototype>
+ <funcdef>char * <function> _XlcGetCSValues</function></funcdef>
+ <paramdef>XlcCharSet<parameter> charset</parameter></paramdef>
+ <paramdef><parameter> ...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcGetCSValues</function>
+function returns NULL if no error occurred;
+otherwise, it returns the name of the first argument that could not
+be obtained. The following values are defined as standard arguments.
+Other values are implementation dependent.
+</para>
+
+<informaltable frame="none">
+ <tgroup cols='3' align='left'>
+ <colspec colname='c1' colwidth="3*" colsep="0"/>
+ <colspec colname='c2' colwidth="1*" colsep="0"/>
+ <colspec colname='c3' colwidth="3*" colsep="0"/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>XlcNName</entry>
+ <entry>char*</entry>
+ <entry>charset name</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNEncodingName</entry>
+ <entry>char*</entry>
+ <entry>XLFD CharSet Registry and Encoding</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNSide</entry>
+ <entry>XlcSide</entry>
+ <entry>charset side (GL, GR, ...)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNCharSize</entry>
+ <entry>int</entry>
+ <entry>number of octets per character</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNSetSize</entry>
+ <entry>int</entry>
+ <entry>number of character sets</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNControlSequence</entry>
+ <entry>char*</entry>
+ <entry>control sequence of Compound Text</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect1>
+
+<sect1 id="Converter_Functions">
+<title>Converter Functions</title>
+<para>
+We provide a set of the common converter APIs, that are independent
+from both of source and destination text type.
+</para>
+
+<literallayout class="monospaced">
+typedef struct _XlcConvRec *XlcConv;
+
+typedef void (*XlcCloseConverterProc)(<emphasis remap='I'>conv</emphasis>);
+ XlcConv <emphasis remap='I'>conv</emphasis>;
+
+typedef int (*XlcConvertProc)(<emphasis remap='I'>conv</emphasis>, <emphasis remap='I'>from</emphasis>, <emphasis remap='I'>from_left</emphasis>, <emphasis remap='I'>to</emphasis>, <emphasis remap='I'>to_left</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>);
+ XlcConv <emphasis remap='I'>conv</emphasis>;
+ XPointer <emphasis remap='I'>*from</emphasis>;
+ int <emphasis remap='I'>*from_left</emphasis>;
+ XPointer <emphasis remap='I'>*to</emphasis>;
+ int <emphasis remap='I'>*to_left</emphasis>;
+ XPointer <emphasis remap='I'>*args</emphasis>;
+ int <emphasis remap='I'>num_args</emphasis>;
+
+typedef void (*XlcResetConverterProc)(<emphasis remap='I'>conv</emphasis>);
+ XlcConv <emphasis remap='I'>conv</emphasis>;
+
+typedef struct _XlcConvMethodsRec {
+ XlcCloseConverterProc close;
+ XlcConvertProc convert;
+ XlcResetConverterProc reset;
+} XlcConvMethodsRec, *XlcConvMethods;
+
+typedef struct _XlcConvRec {
+ XlcConvMethods methods;
+ XPointer state;
+} XlcConvRec;
+</literallayout>
+
+<para>
+<function>Open a converter</function>
+</para>
+
+<funcsynopsis id='_xlcopenconverter'>
+<funcprototype>
+ <funcdef>XlcConv <function> _XlcOpenConverter</function></funcdef>
+ <paramdef>XLCd<parameter> from_lcd</parameter></paramdef>
+ <paramdef>char<parameter> *from_type</parameter></paramdef>
+ <paramdef>XLCd<parameter> to_lcd</parameter></paramdef>
+ <paramdef>char<parameter> *to_type</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<function>_XlcOpenConverter </function>
+function opens the converter which converts a text from specified
+"<emphasis remap='I'>from_type</emphasis>" to specified "<emphasis remap='I'>to_type</emphasis>" encoding. If the
+function cannot find proper converter or cannot open a corresponding
+converter, it returns NULL. Otherwise, it returns the conversion
+descriptor.
+</para>
+
+<para>
+The following types are pre-defined. Other types are implementation
+dependent.
+</para>
+
+<informaltable>
+ <tgroup cols='4' align='left'>
+ <colspec colname='c1' colwidth="3*" colsep="0"/>
+ <colspec colname='c2' colwidth="1*" colsep="0"/>
+ <colspec colname='c3' colwidth="3*" colsep="0"/>
+ <colspec colname='c4' colwidth="2*" colsep="0"/>
+ <thead>
+ <row>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Description</entry>
+ <entry>Arguments</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>XlcNMultiByte</entry>
+ <entry>char *</entry>
+ <entry>multibyte</entry>
+ <entry>-</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNWideChar</entry>
+ <entry>wchar_t *</entry>
+ <entry>wide character</entry>
+ <entry>-</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNCompoundText</entry>
+ <entry>char *</entry>
+ <entry>COMPOUND_TEXT</entry>
+ <entry>-</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNString</entry>
+ <entry>char *</entry>
+ <entry>STRING</entry>
+ <entry>-</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNCharSet</entry>
+ <entry>char *</entry>
+ <entry>per charset</entry>
+ <entry>XlcCharSet</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNChar</entry>
+ <entry>char *</entry>
+ <entry>per character</entry>
+ <entry>XlcCharSet</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+<emphasis role="bold">Close a converter</emphasis>
+</para>
+
+<funcsynopsis id='_xlccloseconverter'>
+<funcprototype>
+ <funcdef>void <function> _XlcCloseConverter</function></funcdef>
+ <paramdef>XlcConv<parameter> conv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcCloseConverter</function>
+function closes the specified converter "<emphasis remap='I'>conv</emphasis>".
+</para>
+
+<para>
+<emphasis role="bold">Code conversion</emphasis>
+</para>
+
+<funcsynopsis id='_xlcconvert'>
+<funcprototype>
+ <funcdef>int <function> _XlcConvert</function></funcdef>
+ <paramdef>XlcConv<parameter> conv</parameter></paramdef>
+ <paramdef>XPointer<parameter> *from</parameter></paramdef>
+ <paramdef>int<parameter> *from_left</parameter></paramdef>
+ <paramdef>XPointer<parameter> *to</parameter></paramdef>
+ <paramdef>int<parameter> *to_left</parameter></paramdef>
+ <paramdef>XPointer<parameter> *args</parameter></paramdef>
+ <paramdef>int<parameter> num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcConvert</function>
+function converts a sequence of characters from one type, in the array
+specified by "<emphasis remap='I'>from</emphasis>", into a sequence of corresponding characters
+in another type, in the array specified by "<emphasis remap='I'>to</emphasis>". The types are
+those specified in the
+<function>_XlcOpenConverter() </function>
+call that returned the conversion descriptor, "<emphasis remap='I'>conv</emphasis>".
+The arguments "<emphasis remap='I'>from</emphasis>", "<emphasis remap='I'>from_left</emphasis>", "<emphasis remap='I'>to</emphasis>" and
+"<emphasis remap='I'>to_left</emphasis>" have the same specification of XPG4 iconv function.
+</para>
+
+<para>
+For state-dependent encodings, the conversion descriptor "<emphasis remap='I'>conv</emphasis>"
+is placed into its initial shift state by a call for which "<emphasis remap='I'>from</emphasis>"
+is a NULL pointer, or for which "<emphasis remap='I'>from</emphasis>" points to a null pointer.
+</para>
+
+<para>
+The following 2 converters prepared by locale returns appropriate
+charset (XlcCharSet) in an area pointed by args[0].
+</para>
+
+<informaltable frame="none">
+ <tgroup cols='3' align='left'>
+ <colspec colname='c1' colwidth="1*" colsep="0"/>
+ <colspec colname='c2' colwidth="1*" colsep="0"/>
+ <colspec colname='c3' colwidth="2*" colsep="0"/>
+ <thead>
+ <row>
+ <entry>From</entry>
+ <entry>To</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row rowsep="0">
+ <entry>XlcNMultiByte</entry>
+ <entry>XlcNCharSet</entry>
+ <entry>Segmentation (Decomposing)</entry>
+ </row>
+ <row rowsep="0">
+ <entry>XlcNWideChar</entry>
+ <entry>XlcNCharSet</entry>
+ <entry>Segmentation (Decomposing)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The conversion, from XlcNMultiByte/XlcNWideChar to XlcNCharSet,
+extracts a segment which has same charset encoding characters.
+More than one segment cannot be converted in a call.
+</para>
+
+<para>
+<emphasis role="bold">Reset a converter</emphasis>
+</para>
+
+<funcsynopsis id='_xlcresetconverter'>
+<funcprototype>
+ <funcdef>void <function> _XlcResetConverter</function></funcdef>
+ <paramdef>XlcConv<parameter> conv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcResetConverter </function>
+function reset the specified converter "<emphasis remap='I'>conv</emphasis>".
+</para>
+
+<para>
+<emphasis role="bold">Register a converter</emphasis>
+</para>
+
+<literallayout class="monospaced">
+typedef XlcConv (*XlcOpenConverterProc)(<emphasis remap='I'>from_lcd</emphasis>, <emphasis remap='I'>from_type</emphasis>, <emphasis remap='I'>to_lcd</emphasis>, <emphasis remap='I'>to_type</emphasis>);
+ XLCd <emphasis remap='I'>from_lcd</emphasis>;
+ char <emphasis remap='I'>*from_type</emphasis>;
+ XLCd <emphasis remap='I'>to_lcd</emphasis>;
+ char <emphasis remap='I'>*to_type</emphasis>;
+</literallayout>
+
+<funcsynopsis id='_xlcsetconverter'>
+<funcprototype>
+ <funcdef>Bool <function> _XlcSetConverter</function></funcdef>
+ <paramdef>XLCd<parameter> from_lcd</parameter></paramdef>
+ <paramdef>char<parameter> *from</parameter></paramdef>
+ <paramdef>XLCd<parameter> to_lcd</parameter></paramdef>
+ <paramdef>char<parameter> *to</parameter></paramdef>
+ <paramdef>XlcOpenConverterProc<parameter> converter</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The <function>XlcSetConverter</function> function registers a converter which convert
+from "<emphasis remap='I'>from_type</emphasis>" to "<emphasis remap='I'>to_type</emphasis>" into the converter list
+(in the specified XLCd).
+</para>
+</sect1>
+
+<sect1 id="X_Locale_Database_functions">
+<title>X Locale Database functions</title>
+<para>
+X Locale Database contains the subset of user's environment that
+depends on language. The following APIs are provided for accessing
+X Locale Database and other locale relative files.
+</para>
+
+<para>
+For more detail about X Locale Database, please refer
+X Locale Database Definition document.
+</para>
+
+<para>
+<emphasis role="bold">Get a resource from database</emphasis>
+</para>
+
+<funcsynopsis id='_xlcgetresource'>
+<funcprototype>
+ <funcdef>void <function> _XlcGetResource</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+ <paramdef>char<parameter> *category</parameter></paramdef>
+ <paramdef>char<parameter> *class</parameter></paramdef>
+ <paramdef>char<parameter> ***value</parameter></paramdef>
+ <paramdef>int<parameter> *count</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcGetResource</function>
+function obtains a locale dependent data which is associated with the
+locale of specified "<emphasis remap='I'>lcd</emphasis>".
+The locale data is provided by system locale or by X Locale Database
+file, and what kind of data is available is implementation dependent.
+</para>
+
+<para>
+The specified "<emphasis remap='I'>category</emphasis>" and "<emphasis remap='I'>class</emphasis>" are used for
+finding out the objective locale data.
+</para>
+
+<para>
+The returned value is returned in value argument in string list form,
+and the returned count shows the number of strings in the value.
+</para>
+
+<para>
+The returned value is owned by locale method, and should not be modified
+or freed by caller.
+</para>
+
+<para>
+<emphasis role="bold">Get a locale relative file name</emphasis>
+</para>
+
+<funcsynopsis id='_xlcfilename'>
+<funcprototype>
+ <funcdef>char *<function>_XlcFileName</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+ <paramdef>char<parameter> *category</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcFileName</function>
+functions returns a file name which is bound to the specified "<emphasis remap='I'>lcd</emphasis>"
+and "<emphasis remap='I'>category</emphasis>", as a null-terminated string. If no file name can
+be found, or there is no readable file for the found file name,
+<function>_XlcFileName</function>
+returns NULL. The returned file name should be freed by caller.
+</para>
+
+<para>
+The rule for searching a file name is implementation dependent.
+In current implementation,
+<function>_XlcFileName </function>
+uses "{category}.dir" file as mapping table, which has pairs of
+strings, a full locale name and a corresponding file name.
+</para>
+
+</sect1>
+
+<sect1 id="Utility_Functions">
+<title>Utility Functions</title>
+
+<para>
+<emphasis role="bold">Compare Latin-1 strings</emphasis>
+</para>
+
+<funcsynopsis id='_xlccompareisolatin1'>
+<funcprototype>
+ <funcdef>int <function> _XlcCompareISOLatin1</function></funcdef>
+ <paramdef>char*str1,<parameter> *str2</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<funcsynopsis id='_xlcncompareisolatin1'>
+<funcprototype>
+ <funcdef>int <function> _XlcNCompareISOLatin1</function></funcdef>
+ <paramdef>char*str1,<parameter> *str2</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_XlcCompareIsoLatin1 </function>
+function to compares two ISO-8859-1 strings. Bytes representing ASCII lower
+case letters are converted to upper case before making the comparison.
+The value returned is an integer less than, equal to, or greater than
+zero, depending on whether "<emphasis remap='I'>str1</emphasis>" is lexicographicly less than,
+equal to, or greater than "<emphasis remap='I'>str2</emphasis>".
+</para>
+
+<para>
+The
+<function>_XlcNCompareIsoLatin1</function>
+function is identical to
+<function>_XlcCompareISOLatin1,</function>
+except that at most "<emphasis remap='I'>len</emphasis>" bytes are compared.
+</para>
+
+<para>
+<emphasis role="bold">Resource Utility</emphasis>
+</para>
+
+<funcsynopsis id='xlcnumber'>
+<funcprototype>
+ <funcdef>int <function> XlcNumber</function></funcdef>
+ <paramdef>ArrayType<parameter> array</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to XtNumber.
+</para>
+
+<funcsynopsis id='_xlccopyfromarg'>
+<funcprototype>
+ <funcdef>void <function> _XlcCopyFromArg</function></funcdef>
+ <paramdef>char<parameter> *src</parameter></paramdef>
+ <paramdef>char<parameter> *dst</parameter></paramdef>
+ <paramdef>int<parameter> size</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<funcsynopsis id='_xlccopytoarg'>
+<funcprototype>
+ <funcdef>void <function> _XlcCopyToArg</function></funcdef>
+ <paramdef>char<parameter> *src</parameter></paramdef>
+ <paramdef>char<parameter> **dst</parameter></paramdef>
+ <paramdef>int<parameter> size</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to
+<function>_XtCopyFromArg </function>
+and
+<function>_XtCopyToArg.</function>
+</para>
+
+<funcsynopsis id='_xlccountvalist'>
+<funcprototype>
+ <funcdef>void <function> _XlcCountVaList</function></funcdef>
+ <paramdef>va_list<parameter> var</parameter></paramdef>
+ <paramdef>int<parameter> *count_ret</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to
+<function>_XtCountVaList.</function>
+</para>
+
+<funcsynopsis id='_xlcvatoarglist'>
+<funcprototype>
+ <funcdef>void <function> _XlcVaToArgList</function></funcdef>
+ <paramdef>va_list<parameter> var</parameter></paramdef>
+ <paramdef>int<parameter> count</parameter></paramdef>
+ <paramdef>XlcArgList<parameter> *args_ret</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to
+<function>_XtVaToArgList.</function>
+</para>
+
+<literallayout class="monospaced">
+typedef struct _XlcResource {
+ char *name;
+ XrmQuark xrm_name;
+ int size;
+ int offset;
+ unsigned long mask;
+} XlcResource, *XlcResourceList;
+</literallayout>
+
+<literallayout class="monospaced">
+#define XlcCreateMask (1L&lt;&lt;0)
+#define XlcDefaultMask (1L&lt;&lt;1)
+#define XlcGetMask (1L&lt;&lt;2)
+#define XlcSetMask (1L&lt;&lt;3)
+#define XlcIgnoreMask (1L&lt;&lt;4)
+</literallayout>
+
+<funcsynopsis id='_xlccompileresourcelist'>
+<funcprototype>
+ <funcdef>void <function> _XlcCompileResourceList</function></funcdef>
+ <paramdef>XlcResourceList<parameter> resources</parameter></paramdef>
+ <paramdef>int<parameter> num_resources</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to
+<function>_XtCompileResourceList.</function>
+</para>
+
+<funcsynopsis id='_xlcgetvalues'>
+<funcprototype>
+ <funcdef>char * <function> _XlcGetValues</function></funcdef>
+ <paramdef>XPointer<parameter> base</parameter></paramdef>
+ <paramdef>XlcResourceList<parameter> resources</parameter></paramdef>
+ <paramdef>int<parameter> num_resources</parameter></paramdef>
+ <paramdef>XlcArgList<parameter> args</parameter></paramdef>
+ <paramdef>int<parameter> num_args</parameter></paramdef>
+ <paramdef>unsignedlong<parameter> mask</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to XtGetSubvalues.
+</para>
+
+<funcsynopsis id='_xlcsetvalues'>
+<funcprototype>
+ <funcdef>char * <function> _XlcSetValues</function></funcdef>
+ <paramdef>XPointer<parameter> base</parameter></paramdef>
+ <paramdef>XlcResourceList<parameter> resources</parameter></paramdef>
+ <paramdef>int<parameter> num_resources</parameter></paramdef>
+ <paramdef>XlcArgList<parameter> args</parameter></paramdef>
+ <paramdef>int<parameter> num_args</parameter></paramdef>
+ <paramdef>unsignedlong<parameter> mask</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+Similar to XtSetSubvalues.
+</para>
+
+<para>
+<emphasis role="bold">ANSI C Compatible Functions</emphasis>
+</para>
+
+<para>
+The following are ANSI C/MSE Compatible Functions for non-ANSI C environment.
+</para>
+
+<funcsynopsis id='_xmblen'>
+<funcprototype>
+ <funcdef>int <function> _Xmblen</function></funcdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xmblen </function>
+function returns the number of characters pointed to by "<emphasis remap='I'>str</emphasis>".
+Only "<emphasis remap='I'>len</emphasis>" bytes in "<emphasis remap='I'>str</emphasis>" are used in determining the
+character count returned. "<emphasis remap='I'>Str</emphasis>" may point at characters from
+any valid codeset in the current locale.
+</para>
+
+<para>
+The call
+<function>_Xmblen</function>
+is equivalent to
+_Xmbtowc(_Xmbtowc((<emphasis remap='I'>wchar_t*</emphasis>)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>))
+</para>
+
+<funcsynopsis id='_xmbtowc'>
+<funcprototype>
+ <funcdef>int <function> _Xmbtowc</function></funcdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xmbtowc</function>
+function converts the character(s) pointed to by "<emphasis remap='I'>str</emphasis>"
+to their wide character representation(s) pointed to by "<emphasis remap='I'>wstr</emphasis>".
+"<emphasis remap='I'>Len</emphasis>" is the number of bytes in "<emphasis remap='I'>str</emphasis>" to be converted.
+The return value is the number of characters converted.
+</para>
+
+<para>
+The call
+<function>_Xmbtowc</function>
+is equivalent to
+_Xlcmbtowc((XLCd)NULL, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>)
+</para>
+
+<funcsynopsis id='_xlcmbtowc'>
+<funcprototype>
+ <funcdef>int <function> _Xlcmbtowc</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xlcmbtowc</function>
+function is identical to
+<function>_Xmbtowc, </function>
+except that it requires the "<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>"
+is (XLCd) NULL,
+<function>_Xlcmbtowc, </function>
+calls
+<function>_XlcCurrentLC </function>
+to determine the current locale.
+</para>
+
+<funcsynopsis id='_xwctomb'>
+<funcprototype>
+ <funcdef>int <function> _Xwctomb</function></funcdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>wchar_t<parameter> wc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xwctomb </function>
+function converts a single wide character pointed to by "<emphasis remap='I'>wc</emphasis>" to
+its multibyte representation pointed to by "<emphasis remap='I'>str</emphasis>".
+On success, the return value is 1.
+</para>
+
+<para>
+The call
+<function>_Xwctomb</function>
+is equivalent to
+_Xlcwctomb((XLCd)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>wstr</emphasis>)
+</para>
+
+<funcsynopsis id='_xlcwctomb'>
+<funcprototype>
+ <funcdef>int <function> _Xlcwctomb</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>wchar_t<parameter> wc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xlcwctomb</function>
+function is identical to _Xwctomb, except that it requires the
+"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL,
+<function>_Xlcwctomb, </function>
+calls
+<function>_XlcCurrentLC </function>
+to determine the current locale.
+</para>
+
+<funcsynopsis id='_xmbstowcs'>
+<funcprototype>
+ <funcdef>int <function> _Xmbstowcs</function></funcdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xmbstowcs</function>
+function converts the NULL-terminated string pointed to by "<emphasis remap='I'>str</emphasis>"
+to its wide character string representation pointed to by "<emphasis remap='I'>wstr</emphasis>".
+"<emphasis remap='I'>Len</emphasis>" is the number of characters in "<emphasis remap='I'>str</emphasis>" to be converted.
+</para>
+
+<para>
+The call
+<function>_Xmbstowcs</function>
+is equivalent to
+_Xlcmbstowcs((XLCd)NULL, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>)
+</para>
+
+<funcsynopsis id='_xlcmbstowcs'>
+<funcprototype>
+ <funcdef>int <function> _Xlcmbstowcs</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xlcmbstowcs </function>
+function is identical to _Xmbstowcs, except that it requires the
+"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL,
+<function>_Xlcmbstowcs, </function>
+calls
+<function>_XlcCurrentLC</function>
+to determine the current locale.
+</para>
+
+<funcsynopsis id='_xwcstombs'>
+<funcprototype>
+ <funcdef>int <function> _Xwcstombs</function></funcdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xwcstombs </function>
+function converts the (wchar_t) NULL terminated wide character string
+pointed to by "<emphasis remap='I'>wstr</emphasis>" to the NULL terminated multibyte string
+pointed to by "<emphasis remap='I'>str</emphasis>".
+</para>
+
+<para>
+The call
+<function>_Xwcstombs </function>
+is equivalent to
+_Xlcwcstombs((XLCd)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>len</emphasis>)
+</para>
+
+<funcsynopsis id='_xlcwcstombs'>
+<funcprototype>
+ <funcdef>int <function> _Xlcwcstombs</function></funcdef>
+ <paramdef>XLCd<parameter> lcd</parameter></paramdef>
+ <paramdef>char<parameter> *str</parameter></paramdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xlcwcstombs </function>
+function is identical to _Xwcstombs, except that it requires the
+"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL,
+<function>_Xlcwcstombs, </function>
+calls
+<function>_XlcCurrentLC </function>
+to determine the current locale.
+</para>
+
+<funcsynopsis id='_xwcslen'>
+<funcprototype>
+ <funcdef>int <function> _Xwcslen</function></funcdef>
+ <paramdef>wchar_t<parameter> *wstr</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xwcslen </function>
+function returns the count of wide characters in the (wchar_t) NULL
+terminated wide character string pointed to by "<emphasis remap='I'>wstr</emphasis>".
+</para>
+
+<funcsynopsis id='_xwcscpy'>
+<funcprototype>
+ <funcdef>wchar_t *<function> _Xwcscpy</function></funcdef>
+ <paramdef>wchar_t<parameter> *wstr1</parameter></paramdef>
+ <paramdef>wchar_t<parameter> *wstr2</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<funcsynopsis id='_xwcsncpy'>
+<funcprototype>
+ <funcdef>wchar_t * <function> _Xwcsncpy</function></funcdef>
+ <paramdef>wchar_t<parameter> *wstr1</parameter></paramdef>
+ <paramdef>wchar_t<parameter> *wstr2</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xwcscpy </function>
+function copies the (wchar_t) NULL terminated wide character string
+pointed to by "<emphasis remap='I'>wstr2</emphasis>" to the object pointed at by "<emphasis remap='I'>wstr1</emphasis>".
+"<emphasis remap='I'>Wstr1</emphasis>" is (wchar_t) NULL terminated. The return value is a
+pointer to "<emphasis remap='I'>wstr1</emphasis>".
+</para>
+
+<para>
+The
+<function>_Xwcsncpy</function>
+function is identical to
+<function>_Xwcscpy, </function>
+except that it copies "<emphasis remap='I'>len</emphasis>" wide characters from the object
+pointed to by "<emphasis remap='I'>wstr2</emphasis>" to the object pointed to "<emphasis remap='I'>wstr1</emphasis>".
+</para>
+
+<funcsynopsis id='_xwcscmp'>
+<funcprototype>
+ <funcdef>int <function> _Xwcscmp</function></funcdef>
+ <paramdef>wchar_t*wstr1,<parameter> *wstr2</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<funcsynopsis id='_xwcsncmp'>
+<funcprototype>
+ <funcdef>int <function> _Xwcsncmp</function></funcdef>
+ <paramdef>wchar_t*wstr1,<parameter> *wstr2</parameter></paramdef>
+ <paramdef>int<parameter> len</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<function>_Xwcscmp </function>
+function compares two (wchar_t) NULL terminated wide character strings.
+The value returned is an integer less than, equal to, or greater than zero,
+depending on whether "<emphasis remap='I'>wstr1</emphasis>" is lexicographicly less then, equal to,
+or greater than "<emphasis remap='I'>str2</emphasis>".
+</para>
+
+<para>
+The
+<function>_Xwcsncmp </function>
+function is identical to
+<function>_XlcCompareISOLatin1, </function>
+except that at most "<emphasis remap='I'>len</emphasis>" wide characters are compared.
+</para>
+
+
+<!-- .sp -->
+<!-- .\" .LP -->
+<!-- .\" <function>Locale Method Internal Functions</function> -->
+<!-- .\" .LP -->
+<!-- .\" .FD 0 -->
+<!-- .\" XlcCharSet _XlcCreateDefaultCharSet(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>ct_sequence</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*name</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*ct_sequence</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .FD 0 -->
+<!-- .\" Bool _XlcParseCharSet(<emphasis remap='I'>charset</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" XlcCharSet <emphasis remap='I'>charset</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .FD 0 -->
+<!-- .\" void _XlcGetLocaleDataBase(<emphasis remap='I'>lcd</emphasis>, <emphasis remap='I'>category</emphasis>, <emphasis remap='I'>name</emphasis>, <emphasis remap='I'>value</emphasis>, <emphasis remap='I'>count</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*category</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*name</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>***value</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" int <emphasis remap='I'>*count</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .FD 0 -->
+<!-- .\" void _XlcDestroyLocaleDataBase(<emphasis remap='I'>lcd</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .FD 0 -->
+<!-- .\" XPointer _XlcCreateLocaleDataBase(<emphasis remap='I'>lcd</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .LP -->
+<!-- .\" .sp -->
+<!-- .\" <function>Obtain an locale database path</function> -->
+<!-- .\" .LP -->
+<!-- .\" .FD 0 -->
+<!-- .\" int _XlcResolveI18NPath(<emphasis remap='I'>dir</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*dir</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .LP -->
+<!-- .\" The -->
+<!-- .\" .PN _XlcResolveI18NPath -->
+<!-- .\" function returns path name list that is related to X Locale Database. -->
+<!-- .\" The obtained path is stored into the array which is pointed by -->
+<!-- .\" specified "<emphasis remap='I'>dir</emphasis>". The path consists of directory paths which -->
+<!-- .\" are separated with colon. -->
+<!-- .\" If the environment variable XLOCALEDIR is specified, the path -->
+<!-- .\" contains its contents. -->
+<!-- .\" .LP -->
+<!-- .\" The default path of X Locale Database is implementation dependent. -->
+<!-- .\" In current implementation, it's determined in build time. -->
+<!-- .\" .LP -->
+<!-- .\" .PN _XlcResolveI18NPath -->
+<!-- .\" does not check overflow of the array to which the "<emphasis remap='I'>dir</emphasis>" -->
+<!-- .\" parameter points. Caller should provide enough buffer to store this -->
+<!-- .\" string. -->
+<!-- .\" .LP -->
+<!-- .\" .sp -->
+<!-- .\" <function>Obtain a full locale name</function> -->
+<!-- .\" .LP -->
+<!-- .\" .FD 0 -->
+<!-- .\" int _XlcResolveLocaleName(<emphasis remap='I'>lc_name</emphasis>, <emphasis remap='I'>full_name</emphasis>, <emphasis remap='I'>language</emphasis>, <emphasis remap='I'>territory</emphasis>, <emphasis remap='I'>codeset</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*lc_name</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*full_name</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*language</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*territory</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*codeset</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .LP -->
+<!-- .\" The -->
+<!-- .\" .PN _XlcResolveLocaleName -->
+<!-- .\" function returns a full locale name. -->
+<!-- .\" The obtained full locale name is stored into the array which is -->
+<!-- .\" pointed by specified "<emphasis remap='I'>full_name</emphasis>". -->
+<!-- .\" The language, territory and codeset part of the full locale name -->
+<!-- .\" are copied to the return arguments, "<emphasis remap='I'>language</emphasis>", -->
+<!-- .\" "<emphasis remap='I'>territory</emphasis>" and "<emphasis remap='I'>codeset</emphasis>", respectively. -->
+<!-- .\" NULL can be specified for these arguments. -->
+<!-- .\" .LP -->
+<!-- .\" The rule for mapping from locale name to full locale name is -->
+<!-- .\" implementation dependent. -->
+<!-- .\" .LP -->
+<!-- .\" .PN _XlcResolveLocaleName -->
+<!-- .\" does not check overflow of the array to which -->
+<!-- .\" "<emphasis remap='I'>full_name</emphasis>", "<emphasis remap='I'>language</emphasis>", "<emphasis remap='I'>territory</emphasis>" and -->
+<!-- .\" "<emphasis remap='I'>codeset</emphasis>" parameter point. -->
+<!-- .\" Caller should provide enough buffer to store those string. -->
+<!-- .\" .LP -->
+<!-- .\" In current implementation, -->
+<!-- .\" .PN _XlcResolveLocaleName -->
+<!-- .\" uses locale.alias file as mapping table, which has pairs of strings, -->
+<!-- .\" a locale name and a full locale name. -->
+<!-- .\" .LP -->
+<!-- .\" .FD 0 -->
+<!-- .\" int _XlcResolveDBName(<emphasis remap='I'>lc_name</emphasis>, <emphasis remap='I'>file_name</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*lc_name</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*file_name</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .FD 0 -->
+<!-- .\" XLCd _XlcCreateLC(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>methods</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" char <emphasis remap='I'>*name</emphasis>; -->
+<!-- .\" .br -->
+<!-- .\" XLCdMethods <emphasis remap='I'>methods</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .FD 0 -->
+<!-- .\" void _XlcDestroyLC(<emphasis remap='I'>lcd</emphasis>) -->
+<!-- .\" .br -->
+<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; -->
+<!-- .\" .FN -->
+<!-- .\" .LP -->
+<!-- .\" -->
+
+</sect1>
+</chapter>
+</book>